# HG changeset patch # User Edouard Tisserant # Date 1542929584 -3600 # Node ID 15f18dc8b56a3d790e0136bbbaaa779c1e02878e # Parent e0f16317668ec0533715cfb3d719c3cf9c60e0fb# Parent 9554952d36d73aff3ee264cf763c50b7ae65a2a8 Merge, with surprizingly little conflicts diff -r e0f16317668e -r 15f18dc8b56a .hgignore --- a/.hgignore Thu Nov 22 23:39:54 2018 +0100 +++ b/.hgignore Fri Nov 23 00:33:04 2018 +0100 @@ -1,6 +1,9 @@ .project .directory +.pytest_cache +.cache +.coverage_full syntax: regexp ^tests/.*/build$ diff -r e0f16317668e -r 15f18dc8b56a .pylint --- a/.pylint Thu Nov 22 23:39:54 2018 +0100 +++ b/.pylint Fri Nov 23 00:33:04 2018 +0100 @@ -110,7 +110,7 @@ # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. -additional-builtins=_,website,JS,cobalt +additional-builtins=_,website,JS,cobalt,PLCBinary # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. @@ -270,7 +270,7 @@ # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. -ignored-modules=_ctypes,_winreg,winreg,django.core.serializers,__pyjamas__,gluon.contrib.simplejson +ignored-modules=_ctypes,_winreg,winreg,django.core.serializers,__pyjamas__,gluon.contrib.simplejson,MotionLibrary # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of diff -r e0f16317668e -r 15f18dc8b56a Beremiz_service.py --- a/Beremiz_service.py Thu Nov 22 23:39:54 2018 +0100 +++ b/Beremiz_service.py Fri Nov 23 00:33:04 2018 +0100 @@ -163,7 +163,9 @@ # Define locale for wx loc = __builtin__.__dict__.get('loc', None) if loc is None: + wx.LogGui.EnableLogging(False) loc = wx.Locale(langid) + wx.LogGui.EnableLogging(True) __builtin__.__dict__['loc'] = loc # Define location for searching translation files loc.AddCatalogLookupPathPrefix(localedir) diff -r e0f16317668e -r 15f18dc8b56a CodeFileTreeNode.py --- a/CodeFileTreeNode.py Thu Nov 22 23:39:54 2018 +0100 +++ b/CodeFileTreeNode.py Fri Nov 23 00:33:04 2018 +0100 @@ -123,7 +123,7 @@ (fname, lnum, src) = ((self.CODEFILE_NAME,) + error) self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1=fname, a2=lnum, a3=src)) self.CreateCodeFileBuffer(True) - except Exception, exc: + except Exception as exc: msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1=self.CTNName(), a2=unicode(exc)) self.GetCTRoot().logger.write_error(msg) self.GetCTRoot().logger.write_error(traceback.format_exc()) diff -r e0f16317668e -r 15f18dc8b56a ConfigTreeNode.py --- a/ConfigTreeNode.py Thu Nov 22 23:39:54 2018 +0100 +++ b/ConfigTreeNode.py Fri Nov 23 00:33:04 2018 +0100 @@ -277,7 +277,7 @@ LDFLAGS = [] if CTNLDFLAGS is not None: # LDFLAGS can be either string - if isinstance(CTNLDFLAGS, str) or isinstance(CTNLDFLAGS, unicode): + if isinstance(CTNLDFLAGS, (str, unicode)): LDFLAGS += [CTNLDFLAGS] # or list of strings elif isinstance(CTNLDFLAGS, list): @@ -626,7 +626,7 @@ self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1=fname, a2=lnum, a3=src)) self.MandatoryParams = ("BaseParams", self.BaseParams) basexmlfile.close() - except Exception, exc: + except Exception as exc: msg = _("Couldn't load confnode base parameters {a1} :\n {a2}").format(a1=ConfNodeName, a2=unicode(exc)) self.GetCTRoot().logger.write_error(msg) self.GetCTRoot().logger.write_error(traceback.format_exc()) @@ -643,7 +643,7 @@ setattr(self, name, obj) self.CTNParams = (name, obj) xmlfile.close() - except Exception, exc: + except Exception as exc: msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1=ConfNodeName, a2=unicode(exc)) self.GetCTRoot().logger.write_error(msg) self.GetCTRoot().logger.write_error(traceback.format_exc()) @@ -656,7 +656,7 @@ pname, ptype = CTNDir.split(NameTypeSeparator) try: self.CTNAddChild(pname, ptype) - except Exception, exc: + except Exception as exc: msg = _("Could not add child \"{a1}\", type {a2} :\n{a3}\n").format(a1=pname, a2=ptype, a3=unicode(exc)) self.GetCTRoot().logger.write_error(msg) self.GetCTRoot().logger.write_error(traceback.format_exc()) diff -r e0f16317668e -r 15f18dc8b56a IDEFrame.py --- a/IDEFrame.py Thu Nov 22 23:39:54 2018 +0100 +++ b/IDEFrame.py Fri Nov 23 00:33:04 2018 +0100 @@ -2628,6 +2628,8 @@ def OnPrintPage(self, page): dc = self.GetDC() + dc.SetBackground(wx.WHITE_BRUSH) + dc.Clear() dc.SetUserScale(1.0, 1.0) dc.SetDeviceOrigin(0, 0) dc.printing = not self.Preview diff -r e0f16317668e -r 15f18dc8b56a PLCControler.py --- a/PLCControler.py Thu Nov 22 23:39:54 2018 +0100 +++ b/PLCControler.py Fri Nov 23 00:33:04 2018 +0100 @@ -460,7 +460,7 @@ programfile.close() self.ProgramFilePath = filepath return program_text, errors, warnings - except PLCGenException, ex: + except PLCGenException as ex: errors.append(ex.message) else: errors.append("No project opened") diff -r e0f16317668e -r 15f18dc8b56a PLCGenerator.py --- a/PLCGenerator.py Thu Nov 22 23:39:54 2018 +0100 +++ b/PLCGenerator.py Fri Nov 23 00:33:04 2018 +0100 @@ -1024,7 +1024,7 @@ format(a1=block_type, a2=self.Name)) try: self.GenerateBlock(instance, block_infos, body, None) - except ValueError, e: + except ValueError as e: raise PLCGenException(e.message) elif isinstance(instance, ConnectorClass): connector = instance.getname() @@ -1302,7 +1302,7 @@ format(a1=block_type, a2=self.Name)) try: paths.append(str(self.GenerateBlock(next, block_infos, body, connection, order, to_inout))) - except ValueError, e: + except ValueError as e: raise PLCGenException(e.message) elif isinstance(next, ContinuationClass): name = next.getname() diff -r e0f16317668e -r 15f18dc8b56a PSKManagement.py --- a/PSKManagement.py Thu Nov 22 23:39:54 2018 +0100 +++ b/PSKManagement.py Fri Nov 23 00:33:04 2018 +0100 @@ -52,8 +52,10 @@ def GetData(project_path): loaded_data = _LoadData(project_path) - psk_files = os.listdir(_pskpath(project_path)) - return _filterData(psk_files, loaded_data) + if loaded_data: + psk_files = os.listdir(_pskpath(project_path)) + return _filterData(psk_files, loaded_data) + return [] def DeleteID(project_path, ID): secret_path = os.path.join(_pskpath(project_path), ID+'.secret') diff -r e0f16317668e -r 15f18dc8b56a ProjectController.py --- a/ProjectController.py Thu Nov 22 23:39:54 2018 +0100 +++ b/ProjectController.py Fri Nov 23 00:33:04 2018 +0100 @@ -61,6 +61,7 @@ from plcopen.types_enums import ComputeConfigurationResourceName, ITEM_CONFNODE import targets from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer +from runtime import PlcStatus from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage base_folder = paths.AbsParentDir(__file__) @@ -798,7 +799,7 @@ status, result, err_result = ProcessLogger(self.logger, buildcmd, no_stdout=True, no_stderr=True).spin() - except Exception, e: + except Exception as e: self.logger.write_error(buildcmd + "\n") self.logger.write_error(repr(e) + "\n") return False @@ -1328,7 +1329,7 @@ self.AppFrame.TabsOpened, self, name, self._getProjectFilesPath(), True) extensions = [] - for extension, name, editor in features.file_editors: + for extension, _name, _editor in features.file_editors: if extension not in extensions: extensions.append(extension) self._ProjectFilesView.SetEditableFileExtensions(extensions) @@ -1427,20 +1428,20 @@ } MethodsFromStatus = { - "Started": {"_Stop": True, - "_Transfer": True, - "_Connect": False, - "_Disconnect": True}, - "Stopped": {"_Run": True, - "_Transfer": True, - "_Connect": False, - "_Disconnect": True}, - "Empty": {"_Transfer": True, - "_Connect": False, - "_Disconnect": True}, - "Broken": {"_Connect": False, - "_Disconnect": True}, - "Disconnected": {}, + PlcStatus.Started: {"_Stop": True, + "_Transfer": True, + "_Connect": False, + "_Disconnect": True}, + PlcStatus.Stopped: {"_Run": True, + "_Transfer": True, + "_Connect": False, + "_Disconnect": True}, + PlcStatus.Empty: {"_Transfer": True, + "_Connect": False, + "_Disconnect": True}, + PlcStatus.Broken: {"_Connect": False, + "_Disconnect": True}, + PlcStatus.Disconnected: {}, } def UpdateMethodsFromPLCStatus(self): @@ -1453,7 +1454,7 @@ self.UpdatePLCLog(log_count) if status is None: self._SetConnector(None, False) - status = "Disconnected" + status = PlcStatus.Disconnected if self.previous_plcstate != status: allmethods = self.DefaultMethods.copy() allmethods.update( @@ -1464,31 +1465,21 @@ if self.AppFrame is not None: updated = True self.AppFrame.RefreshStatusToolBar() - if status == "Disconnected": + if status == PlcStatus.Disconnected: self.AppFrame.ConnectionStatusBar.SetStatusText( - self.GetTextStatus(status), 1) + _(status), 1) self.AppFrame.ConnectionStatusBar.SetStatusText('', 2) else: self.AppFrame.ConnectionStatusBar.SetStatusText( _("Connected to URI: %s") % self.BeremizRoot.getURI_location().strip(), 1) self.AppFrame.ConnectionStatusBar.SetStatusText( - self.GetTextStatus(status), 2) + _(status), 2) return updated - def GetTextStatus(self, status): - msgs = { - "Started": _("Started"), - "Stopped": _("Stopped"), - "Empty": _("Empty"), - "Broken": _("Broken"), - "Disconnected": _("Disconnected") - } - return msgs.get(status, status) - def ShowPLCProgress(self, status="", progress=0): self.AppFrame.ProgressStatusBar.Show() self.AppFrame.ConnectionStatusBar.SetStatusText( - self.GetTextStatus(status), 1) + _(status), 1) self.AppFrame.ProgressStatusBar.SetValue(progress) def HidePLCProgress(self): @@ -1506,7 +1497,7 @@ plc_status, Traces = self._connector.GetTraceVariables() # print [dict.keys() for IECPath, (dict, log, status, fvalue) in # self.IECdebug_datas.items()] - if plc_status == "Started": + if plc_status == PlcStatus.Started: if len(Traces) > 0: for debug_tick, debug_buff in Traces: debug_vars = UnpackDebugBuffer( @@ -1575,7 +1566,7 @@ self.SnapshotAndResetDebugValuesBuffers() def IsPLCStarted(self): - return self.previous_plcstate == "Started" + return self.previous_plcstate == PlcStatus.Started def ReArmDebugRegisterTimer(self): if self.DebugTimer is not None: @@ -1814,7 +1805,7 @@ # Init with actual PLC status and print it self.UpdateMethodsFromPLCStatus() - if self.previous_plcstate in ["Started", "Stopped"]: + if self.previous_plcstate in [PlcStatus.Started, PlcStatus.Stopped]: if self.DebugAvailable() and self.GetIECProgramsAndVariables(): self.logger.write(_("Debugger ready\n")) self._connect_debug() diff -r e0f16317668e -r 15f18dc8b56a bacnet/bacnet.py --- a/bacnet/bacnet.py Thu Nov 22 23:39:54 2018 +0100 +++ b/bacnet/bacnet.py Fri Nov 23 00:33:04 2018 +0100 @@ -570,14 +570,16 @@ # the GUI) are valid... if self.HasDuplicateObjectNames(): self.GetCTRoot().logger.write_warning( - _("Error: BACnet server '%s.x: %s' contains objects with duplicate object names.\n") % (locstr, self.CTNName())) + _("Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n"). + format(a1=locstr, a2=self.CTNName())) raise Exception(False) # TODO: return an error code instead of raising an exception # (currently unsupported by Beremiz) if self.HasDuplicateObjectIDs(): self.GetCTRoot().logger.write_warning( - _("Error: BACnet server '%s.x: %s' contains objects with duplicate object identifiers.\n") % (locstr, self.CTNName())) + _("Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n"). + format(a1=locstr, a2=self.CTNName())) raise Exception(False) # TODO: return an error code instead of raising an exception # (currently unsupported by Beremiz) diff -r e0f16317668e -r 15f18dc8b56a canfestival/canfestival.py --- a/canfestival/canfestival.py Thu Nov 22 23:39:54 2018 +0100 +++ b/canfestival/canfestival.py Fri Nov 23 00:33:04 2018 +0100 @@ -451,7 +451,7 @@ # Create a new copy of the model with DCF loaded with PDO mappings for desired location try: master, pointers = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(), "OD_%s" % prefix) - except config_utils.PDOmappingException, e: + except config_utils.PDOmappingException as e: raise Exception(e.message) # Do generate C file. res = gen_cfile.GenerateFile(Gen_OD_path, master, pointers) diff -r e0f16317668e -r 15f18dc8b56a canfestival/config_utils.py --- a/canfestival/config_utils.py Thu Nov 22 23:39:54 2018 +0100 +++ b/canfestival/config_utils.py Fri Nov 23 00:33:04 2018 +0100 @@ -765,7 +765,7 @@ # Generate MasterNode configuration try: masternode, pointedvariables = GenerateConciseDCF(locations, (0, 1), nodelist, True, "TestNode") - except ValueError, message: + except ValueError as message: print("%s\nTest Failed!" % message) sys.exit() diff -r e0f16317668e -r 15f18dc8b56a connectors/PYRO/__init__.py --- a/connectors/PYRO/__init__.py Thu Nov 22 23:39:54 2018 +0100 +++ b/connectors/PYRO/__init__.py Fri Nov 23 00:33:04 2018 +0100 @@ -37,6 +37,7 @@ from Pyro.errors import PyroError import PSKManagement as PSK +from runtime import PlcStatus zeroconf_service_type = '_PYRO._tcp.local.' # this module attribute contains a list of DNS-SD (Zeroconf) service types @@ -91,7 +92,7 @@ # Try to get the proxy object try: RemotePLCObjectProxy = Pyro.core.getAttrProxyForURI(schemename + "://" + location + "/PLCObject") - except Exception,e: + except Exception: confnodesroot.logger.write_error(_("Connection to '%s' failed with exception '%s'\n") % (location, str(e))) #confnodesroot.logger.write_error(traceback.format_exc()) return None @@ -104,12 +105,12 @@ def catcher_func(*args, **kwargs): try: return func(*args, **kwargs) - except Pyro.errors.ConnectionClosedError, e: + except Pyro.errors.ConnectionClosedError as e: confnodesroot.logger.write_error(_("Connection lost!\n")) confnodesroot._SetConnector(None) - except Pyro.errors.ProtocolError, e: + except Pyro.errors.ProtocolError as e: confnodesroot.logger.write_error(_("Pyro exception: %s\n") % e) - except Exception, e: + except Exception as e: # confnodesroot.logger.write_error(traceback.format_exc()) errmess = ''.join(Pyro.util.getPyroTraceback(e)) confnodesroot.logger.write_error(errmess + "\n") @@ -130,8 +131,8 @@ _special_return_funcs = { "StartPLC": False, - "GetTraceVariables": ("Broken", None), - "GetPLCstatus": ("Broken", None), + "GetTraceVariables": (PlcStatus.Broken, None), + "GetPLCstatus": (PlcStatus.Broken, None), "RemoteExec": (-1, "RemoteExec script failed!") } @@ -140,7 +141,6 @@ A proxy proxy class to handle Beremiz Pyro interface specific behavior. And to put Pyro exception catcher in between caller and Pyro proxy """ - def __getattr__(self, attrName): member = self.__dict__.get(attrName, None) if member is None: @@ -151,4 +151,3 @@ return member return PyroProxyProxy() - diff -r e0f16317668e -r 15f18dc8b56a connectors/WAMP/__init__.py --- a/connectors/WAMP/__init__.py Thu Nov 22 23:39:54 2018 +0100 +++ b/connectors/WAMP/__init__.py Fri Nov 23 00:33:04 2018 +0100 @@ -36,6 +36,7 @@ from autobahn.wamp.exception import TransportLost from autobahn.wamp.serializer import MsgPackSerializer +from runtime import PlcStatus _WampSession = None _WampConnection = None @@ -59,7 +60,7 @@ PLCObjDefaults = { "StartPLC": False, "GetTraceVariables": ("Broken", None), - "GetPLCstatus": ("Broken", None), + "GetPLCstatus": (PlcStatus.Broken, None), "RemoteExec": (-1, "RemoteExec script failed!") } diff -r e0f16317668e -r 15f18dc8b56a dialogs/CommentEditDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dialogs/CommentEditDialog.py Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,86 @@ +# +# This file is part of Beremiz, a Integrated Development Environment for +# programming IEC 61131-3 automates supporting plcopen standard and CanFestival. +# +# Copyright (C) 2018: Andrey Skvortsov +# +# See COPYING file for copyrights details. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from __future__ import absolute_import + +import wx + + +class CommentEditDialog(wx.Dialog): + """ + This dialog behaves like wx.TextEntryDialog, + but additionaly it allows to set custom font and + exact size for wx.TextCtrl. + That allows to edit comment and immediately + see how it'll be shown on wiresheet. + """ + + def __init__(self, parent, font, value="", size=wx.Size(400, 200)): + """ + Constructor + + :param parent: + parent window (wx.Window) + :param font: + the font for text control + :param value: + the default value, which may be the empty string + :param size: + desired initial size for text control. + Minimal size of text control is limited + by (100,100) + """ + wx.Dialog.__init__(self, parent, title=_("Please enter comment text")) + msg_label = wx.StaticText(self, label=_("Edit comment")) + input_size = wx.Size(max(size[0], 100), max(size[1], 100)) + input = wx.TextCtrl(self, style=wx.TE_MULTILINE) + input.SetInitialSize(input_size) + input.SetFont(font) + input.SetValue(value) + buttons = self.CreateButtonSizer(wx.OK | wx.CANCEL) + sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10) + border = 20 + + sizer.Add(msg_label, 0, + flag=wx.TOP | wx.LEFT | wx.RIGHT, + border=border) + sizer.Add(input, 1, + flag=wx.EXPAND | wx.LEFT | wx.RIGHT, + border=border) + sizer.Add(buttons, 0, + flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, + border=border) + + self.SetSizerAndFit(sizer) + self.input = input + + def SetValue(self, value): + """Sets text value""" + self.input.SetValue(value) + + def GetValue(self): + """ + Returns the text that the user has entered + if the user has pressed wx.OK, + or the original value if the user has pressed Cancel. + """ + return self.input.GetValue() diff -r e0f16317668e -r 15f18dc8b56a dialogs/SFCStepNameDialog.py --- a/dialogs/SFCStepNameDialog.py Thu Nov 22 23:39:54 2018 +0100 +++ b/dialogs/SFCStepNameDialog.py Fri Nov 23 00:33:04 2018 +0100 @@ -34,7 +34,7 @@ class SFCStepNameDialog(wx.TextEntryDialog): - def __init__(self, parent, message, caption="Please enter text", defaultValue="", + def __init__(self, parent, message, caption=_("Please enter text"), defaultValue="", style=wx.OK | wx.CANCEL | wx.CENTRE, pos=wx.DefaultPosition): wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos) diff -r e0f16317668e -r 15f18dc8b56a dialogs/__init__.py --- a/dialogs/__init__.py Thu Nov 22 23:39:54 2018 +0100 +++ b/dialogs/__init__.py Fri Nov 23 00:33:04 2018 +0100 @@ -27,6 +27,7 @@ from __future__ import absolute_import +from dialogs.CommentEditDialog import CommentEditDialog from dialogs.ConnectionDialog import ConnectionDialog from dialogs.ActionBlockDialog import ActionBlockDialog from dialogs.FBDBlockDialog import FBDBlockDialog diff -r e0f16317668e -r 15f18dc8b56a editors/LDViewer.py --- a/editors/LDViewer.py Thu Nov 22 23:39:54 2018 +0100 +++ b/editors/LDViewer.py Fri Nov 23 00:33:04 2018 +0100 @@ -1062,17 +1062,17 @@ rungindex = self.FindRung(wires[0]) rung = self.Rungs[rungindex] old_bbox = rung.GetBoundingBox() - for wire in wires: - connections = wire.GetSelectedSegmentConnections() - left_block = wire.EndConnected.GetParentBlock() - if wire.EndConnected not in left_elements: - left_elements.append(wire.EndConnected) - if wire.StartConnected not in right_elements: - right_elements.append(wire.StartConnected) + for w in wires: + connections = w.GetSelectedSegmentConnections() + left_block = w.EndConnected.GetParentBlock() + if w.EndConnected not in left_elements: + left_elements.append(w.EndConnected) + if w.StartConnected not in right_elements: + right_elements.append(w.StartConnected) if connections == (False, False) or connections == (False, True) and isinstance(left_block, LD_PowerRail): - wire.Clean() - self.RemoveWire(wire) - rung.SelectElement(wire) + w.Clean() + self.RemoveWire(w) + rung.SelectElement(w) for left_element in left_elements: left_block = left_element.GetParentBlock() if isinstance(left_block, LD_PowerRail): @@ -1082,8 +1082,8 @@ else: connectors = left_block.GetConnectors() for connector in connectors["outputs"]: - for wire, _handle in connector.GetWires(): - self.RefreshPosition(wire.StartConnected.GetParentBlock()) + for lwire, _handle in connector.GetWires(): + self.RefreshPosition(lwire.StartConnected.GetParentBlock()) for right_element in right_elements: self.RefreshPosition(right_element.GetParentBlock()) rung.RefreshBoundingBox() diff -r e0f16317668e -r 15f18dc8b56a editors/SFCViewer.py --- a/editors/SFCViewer.py Thu Nov 22 23:39:54 2018 +0100 +++ b/editors/SFCViewer.py Fri Nov 23 00:33:04 2018 +0100 @@ -548,7 +548,7 @@ dialog.Destroy() def AddDivergence(self): - if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, Graphic_Group) or isinstance(self.SelectedElement, SFC_Step): + if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, (Graphic_Group, SFC_Step)): dialog = SFCDivergenceDialog(self.ParentWindow, self.Controler, self.TagName) dialog.SetPreviewFont(self.GetFont()) if dialog.ShowModal() == wx.ID_OK: diff -r e0f16317668e -r 15f18dc8b56a editors/TextViewer.py --- a/editors/TextViewer.py Thu Nov 22 23:39:54 2018 +0100 +++ b/editors/TextViewer.py Fri Nov 23 00:33:04 2018 +0100 @@ -963,4 +963,5 @@ self.StartStyling(highlight_start_pos, 0xff) self.SetStyling(highlight_end_pos - highlight_start_pos, highlight_type) self.StartStyling(highlight_start_pos, 0x00) - self.SetStyling(len(self.Editor.GetText()) - highlight_end_pos, wx.stc.STC_STYLE_DEFAULT) + until_end = max(0, len(self.Editor.GetText()) - highlight_end_pos) + self.SetStyling(until_end, wx.stc.STC_STYLE_DEFAULT) diff -r e0f16317668e -r 15f18dc8b56a editors/Viewer.py --- a/editors/Viewer.py Thu Nov 22 23:39:54 2018 +0100 +++ b/editors/Viewer.py Fri Nov 23 00:33:04 2018 +0100 @@ -83,7 +83,7 @@ 'mono': 'Courier', 'helv': 'Helvetica', 'other': 'new century schoolbook', - 'size': 12, + 'size': 10, } if wx.Platform == '__WXMSW__': @@ -764,15 +764,14 @@ self.ElementRefreshList_lock = Lock() dc = wx.ClientDC(self.Editor) - font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"]) - dc.SetFont(font) - width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ") - while width > 260: - faces["size"] -= 1 + while True: font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"]) dc.SetFont(font) width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ") - self.SetFont(font) + if width < 260: + break + faces["size"] -= 1 + self.Editor.SetFont(font) self.MiniTextDC = wx.MemoryDC(wx.EmptyBitmap(1, 1)) self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"])) @@ -2659,11 +2658,8 @@ self.AddNewElement(connection, bbox, wire) def AddNewComment(self, bbox): - dialog = wx.TextEntryDialog(self.ParentWindow, - _("Edit comment"), - _("Please enter comment text"), - "", wx.OK | wx.CANCEL | wx.TE_MULTILINE) - dialog.SetClientSize(wx.Size(400, 200)) + dialog = CommentEditDialog(self.ParentWindow, + self.GetFont()) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetValue() id = self.GetNewId() @@ -3101,14 +3097,10 @@ dialog.Destroy() def EditCommentContent(self, comment): - dialog = wx.TextEntryDialog(self.ParentWindow, - _("Edit comment"), - _("Please enter comment text"), - comment.GetContent(), - wx.OK | wx.CANCEL | wx.TE_MULTILINE) - width, height = comment.GetSize() - dialogSize = wx.Size(max(width + 30, 400), max(height + 60, 200)) - dialog.SetClientSize(dialogSize) + dialog = CommentEditDialog(self.ParentWindow, + self.GetFont(), + comment.GetContent(), + comment.GetSize()) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetValue() rect = comment.GetRedrawRect(1, 1) @@ -3565,7 +3557,7 @@ self.SearchResults = [] blocks = [] for infos, start, end, _text in self.Controler.SearchInPou(self.TagName, search_params, self.Debug): - if (infos[0] == self.TagName or self.TagName.split("::")[0] in ['A', 'T']) and infos[1] is not 'name': + if (infos[0] == self.TagName or self.TagName.split("::")[0] in ['A', 'T']) and infos[1] != 'name': if infos[1] in ["var_local", "var_input", "var_output", "var_inout"]: self.SearchResults.append((infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT)) else: @@ -3717,12 +3709,14 @@ dc.SetPen(self.PagePen) xstart, ystart = self.GetViewStart() window_size = self.Editor.GetClientSize() - for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): - dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), - xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0])) - for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): - dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, - int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) + if self.PageSize[0] != 0: + for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): + dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), + xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0])) + if self.PageSize[1] != 0: + for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): + dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, + int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) # Draw all elements for comment in self.Comments.itervalues(): diff -r e0f16317668e -r 15f18dc8b56a etherlab/CommonEtherCATFunction.py --- a/etherlab/CommonEtherCATFunction.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/CommonEtherCATFunction.py Fri Nov 23 00:33:04 2018 +0100 @@ -1,1591 +1,1602 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - - -# This file is part of Beremiz -# -# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab. University of Seoul, Korea -# -# See COPYING file for copyrights details. - -import os -import wx - -mailbox_protocols = ["AoE", "EoE", "CoE", "FoE", "SoE", "VoE"] - -def ExtractHexDecValue(value): - """ - convert numerical value in string format into decimal or hex format. - @param value : hex or decimal data - @return integer data - """ - try: - return int(value) - except: - pass - try: - return int(value.replace("#", "0"), 16) - - except: - raise ValueError, "Invalid value for HexDecValue \"%s\"" % value - -def ExtractName(names, default=None): - """ - Extract "name" field from XML entries. - @param names : XML entry - @default : if it fails to extract from the designated XML entry, return the default value ("None"). - @return default or the name extracted - """ - if len(names) == 1: - return names[0].getcontent() - else: - for name in names: - if name.getLcId() == 1033: - return name.getcontent() - return default - -#-------------------------------------------------- -# Remote Exec Etherlab Commands -#-------------------------------------------------- - -# --------------------- for master --------------------------- -MASTER_STATE = """ -import commands -result = commands.getoutput("ethercat master") -returnVal =result -""" - -# --------------------- for slave ---------------------------- -# ethercat state -p (slave position) (state (INIT, PREOP, SAFEOP, OP)) -SLAVE_STATE = """ -import commands -result = commands.getoutput("ethercat state -p %d %s") -returnVal = result -""" - -# ethercat slave -GET_SLAVE = """ -import commands -result = commands.getoutput("ethercat slaves") -returnVal =result -""" - -# ethercat xml -p (slave position) -SLAVE_XML = """ -import commands -result = commands.getoutput("ethercat xml -p %d") -returnVal = result -""" - -# ethercat sdos -p (slave position) -SLAVE_SDO = """ -import commands -result = commands.getoutput("ethercat sdos -p %d") -returnVal =result -""" - -# ethercat upload -p (slave position) (main index) (sub index) -GET_SLOW_SDO = """ -import commands -result = commands.getoutput("ethercat upload -p %d %s %s") -returnVal =result -""" - -# ethercat download -p (slave position) (main index) (sub index) (value) -SDO_DOWNLOAD = """ -import commands -result = commands.getoutput("ethercat download --type %s -p %d %s %s %s") -returnVal =result -""" - -# ethercat sii_read -p (slave position) -SII_READ = """ -import commands -result = commands.getoutput("ethercat sii_read -p %d") -returnVal =result -""" - -# ethercat reg_read -p (slave position) (address) (size) -REG_READ = """ -import commands -result = commands.getoutput("ethercat reg_read -p %d %s %s") -returnVal =result -""" - -# ethercat sii_write -p (slave position) - (contents) -SII_WRITE = """ -import subprocess -process = subprocess.Popen( - ["ethercat", "-f", "sii_write", "-p", "%d", "-"], - stdin=subprocess.PIPE) -process.communicate(sii_data) -returnVal = process.returncode -""" - -# ethercat reg_write -p (slave position) -t (uinit16) (address) (data) -REG_WRITE = """ -import commands -result = commands.getoutput("ethercat reg_write -p %d -t uint16 %s %s") -returnVal =result -""" - -# ethercat rescan -p (slave position) -RESCAN = """ -import commands -result = commands.getoutput("ethercat rescan -p %d") -returnVal =result -""" - -#-------------------------------------------------- -# Common Method For EtherCAT Management -#-------------------------------------------------- -class _CommonSlave: - - # ----- Data Structure for ethercat management ---- - SlaveState = "" - - # category of SDO data - DatatypeDescription, CommunicationObject, ManufacturerSpecific, \ - ProfileSpecific, Reserved, AllSDOData = range(6) - - # store the execution result of "ethercat sdos" command into SaveSDOData. - SaveSDOData = [] - - # Flags for checking "write" permission of OD entries - CheckPREOP = False - CheckSAFEOP = False - CheckOP = False - - # Save PDO Data - TxPDOInfo = [] - TxPDOCategory = [] - RxPDOInfo = [] - RxPDOCategory = [] - - # Save EEPROM Data - SiiData = "" - - # Save Register Data - RegData = "" - CrtRegSpec = {"ESCType": "", - "FMMUNumber": "", - "SMNumber": "", - "PDIType": ""} - - def __init__(self, controler): - """ - Constructor - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - self.Controler = controler - - self.ClearSDODataSet() - - #------------------------------------------------------------------------------- - # Used Master State - #------------------------------------------------------------------------------- - def GetMasterState(self): - """ - Execute "ethercat master" command and parse the execution result - @return MasterState - """ - - # exectute "ethercat master" command - error, return_val = self.Controler.RemoteExec(MASTER_STATE, return_val = None) - master_state = {} - # parse the reslut - for each_line in return_val.splitlines(): - if len(each_line) > 0 : - chunks = each_line.strip().split(':', 1) - key = chunks[0] - value = [] - if len(chunks) > 1 : - value = chunks[1].split() - if '(attached)' in value: - value.remove('(attached)') - master_state[key] = value - - return master_state - - #------------------------------------------------------------------------------- - # Used Slave State - #------------------------------------------------------------------------------- - def RequestSlaveState(self, command): - """ - Set slave state to the specified one using "ethercat states -p %d %s" command. - Command example : "ethercat states -p 0 PREOP" (target slave position and target state are given.) - @param command : target slave state - """ - error, return_val = self.Controler.RemoteExec(SLAVE_STATE%(self.Controler.GetSlavePos(), command), return_val = None) - - def GetSlaveStateFromSlave(self): - """ - Get slave information using "ethercat slaves" command and store the information into internal data structure - (self.SlaveState) for "Slave State" - return_val example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100) - """ - error, return_val = self.Controler.RemoteExec(GET_SLAVE, return_val = None) - self.SlaveState = return_val - return return_val - - #------------------------------------------------------------------------------- - # Used SDO Management - #------------------------------------------------------------------------------- - def GetSlaveSDOFromSlave(self): - """ - Get SDO objects information of current slave using "ethercat sdos -p %d" command. - Command example : "ethercat sdos -p 0" - @return return_val : execution results of "ethercat sdos" command (need to be parsed later) - """ - error, return_val = self.Controler.RemoteExec(SLAVE_SDO%(self.Controler.GetSlavePos()), return_val = None) - return return_val - - def SDODownload(self, data_type, idx, sub_idx, value): - """ - Set an SDO object value to user-specified value using "ethercat download" command. - Command example : "ethercat download --type int32 -p 0 0x8020 0x12 0x00000000" - @param data_type : data type of SDO entry - @param idx : index of the SDO entry - @param sub_idx : subindex of the SDO entry - @param value : value of SDO entry - """ - error, return_val = self.Controler.RemoteExec(SDO_DOWNLOAD%(data_type, self.Controler.GetSlavePos(), idx, sub_idx, value), return_val = None) - - def BackupSDODataSet(self): - """ - Back-up current SDO entry information to restore the SDO data - in case that the user cancels SDO update operation. - """ - self.BackupDatatypeDescription = self.SaveDatatypeDescription - self.BackupCommunicationObject = self.SaveCommunicationObject - self.BackupManufacturerSpecific = self.SaveManufacturerSpecific - self.BackupProfileSpecific = self.SaveProfileSpecific - self.BackupReserved = self.SaveReserved - self.BackupAllSDOData = self.SaveAllSDOData - - def ClearSDODataSet(self): - """ - Clear the specified SDO entry information. - """ - for count in range(6): - self.SaveSDOData.append([]) - - #------------------------------------------------------------------------------- - # Used PDO Monitoring - #------------------------------------------------------------------------------- - def RequestPDOInfo(self): - """ - Load slave information from RootClass (XML data) and parse the information (calling SlavePDOData() method). - """ - # Load slave information from ESI XML file (def EthercatMaster.py) - slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) - - type_infos = slave.getType() - device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) - # Initialize PDO data set - self.ClearDataSet() - - # if 'device' object is valid, call SavePDOData() to parse PDO data - if device is not None : - self.SavePDOData(device) - - def SavePDOData(self, device): - """ - Parse PDO data and store the results in TXPDOCategory and RXPDOCategory - Tx(Rx)PDOCategory : index, name, entry number - Tx(Rx)Info : entry index, sub index, name, length, type - @param device : Slave information extracted from ESI XML file - """ - # Parsing TXPDO entries - for pdo, pdo_info in ([(pdo, "Inputs") for pdo in device.getTxPdo()]): - # Save pdo_index, entry, and name of each entry - pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) - entries = pdo.getEntry() - pdo_name = ExtractName(pdo.getName()) - - # Initialize entry number count - count = 0 - - # Parse entries - for entry in entries: - # Save index and subindex - index = ExtractHexDecValue(entry.getIndex().getcontent()) - subindex = ExtractHexDecValue(entry.getSubIndex()) - # if entry name exists, save entry data - if ExtractName(entry.getName()) is not None : - entry_infos = { - "entry_index" : index, - "subindex" : subindex, - "name" : ExtractName(entry.getName()), - "bitlen" : entry.getBitLen(), - "type" : entry.getDataType().getcontent() - } - self.TxPDOInfo.append(entry_infos) - count += 1 - - categorys = {"pdo_index" : pdo_index, "name" : pdo_name, "number_of_entry" : count} - self.TxPDOCategory.append(categorys) - - # Parsing RxPDO entries - for pdo, pdo_info in ([(pdo, "Outputs") for pdo in device.getRxPdo()]): - # Save pdo_index, entry, and name of each entry - pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) - entries = pdo.getEntry() - pdo_name = ExtractName(pdo.getName()) - - # Initialize entry number count - count = 0 - - # Parse entries - for entry in entries: - # Save index and subindex - index = ExtractHexDecValue(entry.getIndex().getcontent()) - subindex = ExtractHexDecValue(entry.getSubIndex()) - # if entry name exists, save entry data - if ExtractName(entry.getName()) is not None : - entry_infos = { - "entry_index" : index, - "subindex" : subindex, - "name" : ExtractName(entry.getName()), - "bitlen" : str(entry.getBitLen()), - "type" : entry.getDataType().getcontent() - } - self.RxPDOInfo.append(entry_infos) - count += 1 - - categorys = {"pdo_index" : pdo_index, "name" : pdo_name, "number_of_entry" : count} - self.RxPDOCategory.append(categorys) - - def GetTxPDOCategory(self): - """ - Get TxPDOCategory data structure (Meta informaton of TxPDO). - TxPDOCategorys : index, name, number of entries - @return TxPDOCategorys - """ - return self.TxPDOCategory - - def GetRxPDOCategory(self): - """ - Get RxPDOCategory data structure (Meta information of RxPDO). - RxPDOCategorys : index, name, number of entries - @return RxPDOCategorys - """ - return self.RxPDOCategory - - def GetTxPDOInfo(self): - """ - Get TxPDOInfo data structure (Detailed information on TxPDO entries). - TxPDOInfos : entry index, sub index, name, length, type - @return TxPDOInfos - """ - return self.TxPDOInfo - - def GetRxPDOInfo(self): - """ - Get RxPDOInfo data structure (Detailed information on RxPDO entries). - RxPDOInfos : entry index, sub index, name, length, type - @return RxPDOInfos - """ - return self.RxPDOInfo - - def ClearDataSet(self): - """ - Initialize PDO management data structure. - """ - self.TxPDOInfos = [] - self.TxPDOCategorys = [] - self.RxPDOInfos = [] - self.RxPDOCategorys = [] - - #------------------------------------------------------------------------------- - # Used EEPROM Management - #------------------------------------------------------------------------------- - # Base data types in ETG2000; format = {"Name": "BitSize"} - BaseDataTypeDict = {"BOOL": "01", - "SINT": "02", - "INT": "03", - "DINT": "04", - "USINT": "05", - "UINT": "06", - "UDINT": "07", - "REAL": "08", - "INT24": "10", - "LREAL": "11", - "INT40": "12", - "INT48": "13", - "INT56": "14", - "LINT": "15", - "UINT24": "16", - "UINT40": "18", - "UINT48": "19", - "UINT56": "1a", - "ULINT": "1b", - "USINT": "1e", - "BITARR8": "2d", - "BITARR16": "2e", - "BITARR32": "2f", - "BIT1": "30", - "BIT2": "31", - "BIT3": "32", - "BIT4": "33", - "BIT5": "34", - "BIT6": "35", - "BIT7": "36", - "BIT8": "37"} - - def GetSmartViewInfos(self): - """ - Parse XML data for "Smart View" of EEPROM contents. - @return smartview_infos : EEPROM contents dictionary - """ - - smartview_infos = {"eeprom_size": 128, - "pdi_type": 0, - "device_emulation": "False", - "vendor_id": '0x00000000', - "product_code": '0x00000000', - "revision_no": '0x00000000', - "serial_no": '0x00000000', - "supported_mailbox": "", - "mailbox_bootstrapconf_outstart": '0', - "mailbox_bootstrapconf_outlength": '0', - "mailbox_bootstrapconf_instart": '0', - "mailbox_bootstrapconf_inlength": '0', - "mailbox_standardconf_outstart": '0', - "mailbox_standardconf_outlength": '0', - "mailbox_standardconf_instart": '0', - "mailbox_standardconf_inlength": '0'} - - slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) - type_infos = slave.getType() - device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) - - # 'device' represents current slave device selected by user - if device is not None: - for eeprom_element in device.getEeprom().getcontent(): - # get EEPROM size; -- - if eeprom_element["name"] == "ByteSize": - smartview_infos["eeprom_size"] = eeprom_element - - elif eeprom_element["name"] == "ConfigData": - configData_data = self.DecimalToHex(eeprom_element) - # get PDI type; -- address 0x00 - smartview_infos["pdi_type"] = int(configData_data[0:2], 16) - # get state of device emulation; -- address 0x01 - if "{:0>8b}".format(int(configData_data[2:4], 16))[7] == '1': - smartview_infos["device_emulation"] = "True" - - elif eeprom_element["name"] == "BootStrap": - bootstrap_data = "{:0>16x}".format(eeprom_element) - # get bootstrap configuration; -- - for cfg, iter in [("mailbox_bootstrapconf_outstart", 0), - ("mailbox_bootstrapconf_outlength", 1), - ("mailbox_bootstrapconf_instart", 2), - ("mailbox_bootstrapconf_inlength", 3)]: - smartview_infos[cfg] = str(int(bootstrap_data[4*iter+2:4*(iter+1)]+bootstrap_data[4*iter:4*iter+2], 16)) - - # get protocol (profile) types supported by mailbox; - - mb = device.getMailbox() - if mb is not None: - for mailbox_protocol in mailbox_protocols: - if getattr(mb,"get%s"%mailbox_protocol)() is not None: - smartview_infos["supported_mailbox"] += "%s, "%mailbox_protocol - smartview_infos["supported_mailbox"] = smartview_infos["supported_mailbox"].strip(", ") - - # get standard configuration of mailbox; - - for sm_element in device.getSm(): - if sm_element.getcontent() == "MBoxOut": - smartview_infos["mailbox_standardconf_outstart"] = str(ExtractHexDecValue(sm_element.getStartAddress())) - smartview_infos["mailbox_standardconf_outlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize())) - elif sm_element.getcontent() == "MBoxIn": - smartview_infos["mailbox_standardconf_instart"] = str(ExtractHexDecValue(sm_element.getStartAddress())) - smartview_infos["mailbox_standardconf_inlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize())) - else: - pass - - # get device identity from - - # vendor ID; by default, pre-defined value in self.ModulesLibrary - # if device type in 'vendor' item equals to actual slave device type, set 'vendor_id' to vendor ID. - for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): - for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]: - if available_device[0] == type_infos["device_type"]: - smartview_infos["vendor_id"] = "0x" + "{:0>8x}".format(vendor_id) - - # product code; - if device.getType().getProductCode() is not None: - product_code = device.getType().getProductCode() - smartview_infos["product_code"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(product_code)) - - # revision number; - if device.getType().getRevisionNo() is not None: - revision_no = device.getType().getRevisionNo() - smartview_infos["revision_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(revision_no)) - - # serial number; - if device.getType().getSerialNo() is not None: - serial_no = device.getType().getSerialNo() - smartview_infos["serial_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(serial_no)) - - return smartview_infos - - else: - return None - - def DecimalToHex(self, decnum): - """ - Convert decimal value into hexadecimal representation. - @param decnum : decimal value - @return hex_data : hexadecimal representation of input value in decimal - """ - value = "%x" % decnum - value_len = len(value) - if (value_len % 2) == 0: - hex_len = value_len - else: - hex_len = (value_len / 2) * 2 + 2 - - hex_data = ("{:0>"+str(hex_len)+"x}").format(decnum) - - return hex_data - - def SiiRead(self): - """ - Get slave EEPROM contents maintained by master device using "ethercat sii_read -p %d" command. - Command example : "ethercat sii_read -p 0" - @return return_val : result of "ethercat sii_read" (binary data) - """ - error, return_val = self.Controler.RemoteExec(SII_READ%(self.Controler.GetSlavePos()), return_val = None) - self.SiiData = return_val - return return_val - - def SiiWrite(self, binary): - """ - Overwrite slave EEPROM contents using "ethercat sii_write -p %d" command. - Command example : "ethercat sii_write -p 0 - (binary contents)" - @param binary : EEPROM contents in binary data format - @return return_val : result of "ethercat sii_write" (If it succeeds, the return value is NULL.) - """ - error, return_val = self.Controler.RemoteExec(SII_WRITE%(self.Controler.GetSlavePos()), return_val = None, sii_data = binary) - return return_val - - def LoadData(self): - """ - Loading data from EEPROM use Sii_Read Method - @return self.BinaryCode : slave EEPROM data in binary format (zero-padded) - """ - return_val = self.Controler.CommonMethod.SiiRead() - self.BinaryCode = return_val - self.Controler.SiiData = self.BinaryCode - - # append zero-filled padding data up to EEPROM size - for index in range(self.SmartViewInfosFromXML["eeprom_size"] - len(self.BinaryCode)): - self.BinaryCode = self.BinaryCode +'ff'.decode('hex') - - return self.BinaryCode - - def HexRead(self, binary): - """ - Convert binary digit representation into hexadecimal representation for "Hex View" menu. - @param binary : binary digits - @return hexCode : hexadecimal digits - @return hexview_table_row, hexview_table_col : Grid size for "Hex View" UI - """ - row_code = [] - row_text = "" - row = 0 - hex_code = [] - - hexview_table_col = 17 - - for index in range(0, len(binary)) : - if len(binary[index]) != 1: - break - else: - digithexstr = hex(ord(binary[index])) - - tempvar2 = digithexstr[2:4] - if len(tempvar2) == 1: - tempvar2 = "0" + tempvar2 - row_code.append(tempvar2) - - if int(digithexstr, 16)>=32 and int(digithexstr, 16)<=126: - row_text = row_text + chr(int(digithexstr, 16)) - else: - row_text = row_text + "." - - if index != 0 : - if len(row_code) == (hexview_table_col - 1): - row_code.append(row_text) - hex_code.append(row_code) - row_text = "" - row_code = [] - row = row + 1 - - hexview_table_row = row - - return hex_code, hexview_table_row, hexview_table_col - - def GenerateEEPROMList(self, data, direction, length): - """ - Generate EEPROM data list by reconstructing 'data' string. - example : data="12345678", direction=0, length=8 -> eeprom_list=['12', '34', '56', '78'] - data="12345678", direction=1, length=8 -> eeprom_list=['78', '56', '34', '12'] - @param data : string to be reconstructed - @param direction : endianness - @param length : data length - @return eeprom_list : reconstructed list data structure - """ - eeprom_list = [] - - if direction is 0 or 1: - for i in range(length/2): - if data == "": - eeprom_list.append("00") - else: - eeprom_list.append(data[direction*(length-2):direction*(length-2)+2]) - data = data[(1-direction)*2:length-direction*2] - length -= 2 - return eeprom_list - - def XmlToEeprom(self): - """ - Extract slave EEPROM contents using slave ESI XML file. - - Mandatory parts - - String category : ExtractEEPROMStringCategory() - - General category : ExtractEEPROMGeneralCategory() - - FMMU category : ExtractEEPROMFMMUCategory - - SyncM category : ExtractEEPROMSyncMCategory() - - Tx/RxPDO category : ExtractEEPROMPDOCategory() - - DC category : ExtractEEPROMDCCategory() - @return eeprom_binary - """ - eeprom = [] - data = "" - eeprom_size = 0 - eeprom_binary = "" - - # 'device' is the slave device of the current EtherCAT slave plugin - slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) - type_infos = slave.getType() - device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) - - if device is not None: - # get ConfigData for EEPROM offset 0x0000-0x000d; -- - for eeprom_element in device.getEeprom().getcontent(): - if eeprom_element["name"] == "ConfigData": - data = self.DecimalToHex(eeprom_element) - eeprom += self.GenerateEEPROMList(data, 0, 28) - - # calculate CRC for EEPROM offset 0x000e-0x000f - crc = 0x48 - for segment in eeprom: - for i in range(8): - bit = crc & 0x80 - crc = (crc << 1) | ((int(segment, 16) >> (7 - i)) & 0x01) - if bit: - crc ^= 0x07 - for k in range(8): - bit = crc & 0x80 - crc <<= 1 - if bit: - crc ^= 0x07 - eeprom.append(hex(crc)[len(hex(crc))-3:len(hex(crc))-1]) - eeprom.append("00") - - # get VendorID for EEPROM offset 0x0010-0x0013; - data = "" - for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): - for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]: - if available_device[0] == type_infos["device_type"]: - data = "{:0>8x}".format(vendor_id) - eeprom += self.GenerateEEPROMList(data, 1, 8) - - # get Product Code for EEPROM offset 0x0014-0x0017; - data = "" - if device.getType().getProductCode() is not None: - data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getProductCode())) - eeprom += self.GenerateEEPROMList(data, 1, 8) - - # get Revision Number for EEPROM offset 0x0018-0x001b; - data = "" - if device.getType().getRevisionNo() is not None: - data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getRevisionNo())) - eeprom += self.GenerateEEPROMList(data, 1, 8) - - # get Serial Number for EEPROM 0x001c-0x001f; - data = "" - if device.getType().getSerialNo() is not None: - data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getSerialNo())) - eeprom += self.GenerateEEPROMList(data, 1, 8) - - # get Execution Delay for EEPROM 0x0020-0x0021; not analyzed yet - eeprom.append("00") - eeprom.append("00") - - # get Port0/1 Delay for EEPROM offset 0x0022-0x0025; not analyzed yet - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - - # reserved for EEPROM offset 0x0026-0x0027; - eeprom.append("00") - eeprom.append("00") - - # get BootStrap for EEPROM offset 0x0028-0x002e; -- - data = "" - for eeprom_element in device.getEeprom().getcontent(): - if eeprom_element["name"] == "BootStrap": - data = "{:0>16x}".format(eeprom_element) - eeprom += self.GenerateEEPROMList(data, 0, 16) - - # get Standard Mailbox for EEPROM offset 0x0030-0x0037; - - data = "" - standard_send_mailbox_offset = None - standard_send_mailbox_size = None - standard_receive_mailbox_offset = None - standard_receive_mailbox_size = None - for sm_element in device.getSm(): - if sm_element.getcontent() == "MBoxOut": - standard_receive_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress())) - standard_receive_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize())) - elif sm_element.getcontent() == "MBoxIn": - standard_send_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress())) - standard_send_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize())) - - if standard_receive_mailbox_offset is None: - eeprom.append("00") - eeprom.append("00") - else: - eeprom.append(standard_receive_mailbox_offset[2:4]) - eeprom.append(standard_receive_mailbox_offset[0:2]) - if standard_receive_mailbox_size is None: - eeprom.append("00") - eeprom.append("00") - else: - eeprom.append(standard_receive_mailbox_size[2:4]) - eeprom.append(standard_receive_mailbox_size[0:2]) - if standard_send_mailbox_offset is None: - eeprom.append("00") - eeprom.append("00") - else: - eeprom.append(standard_send_mailbox_offset[2:4]) - eeprom.append(standard_send_mailbox_offset[0:2]) - if standard_send_mailbox_size is None: - eeprom.append("00") - eeprom.append("00") - else: - eeprom.append(standard_send_mailbox_size[2:4]) - eeprom.append(standard_send_mailbox_size[0:2]) - - # get supported mailbox protocols for EEPROM offset 0x0038-0x0039; - data = 0 - mb = device.getMailbox() - if mb is not None : - for bit,mbprot in enumerate(mailbox_protocols): - if getattr(mb,"get%s"%mbprot)() is not None: - data += 1<---- - # vendor_specific_data : vendor specific data (binary type) - vendor_specific_data = "" - # vendor_spec_strings : list of vendor specific "strings" for preventing duplicated strings - vendor_spec_strings = [] - for element in device.getType().getcontent(): - data += element - if data is not "" and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.OrderIdx = vendor_spec_strings.index(data)+1 - typeflag = True - break - if typeflag is False: - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - typeflag = True - self.OrderIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - data = "" - - # element2-1; ---- - data = device.getGroupType() - if data is not None and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.GroupIdx = vendor_spec_strings.index(data)+1 - grouptypeflag = True - break - if grouptypeflag is False: - grouptype = data - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - grouptypeflag = True - self.GroupIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - - # element2-2; --- - if grouptypeflag is False: - if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: - for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): - for group_type, group_etc in vendor["groups"].iteritems(): - for device_item in group_etc["devices"]: - if device == device_item[1]: - data = group_type - if data is not None and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.GroupIdx = vendor_spec_strings.index(data)+1 - grouptypeflag = True - break - if grouptypeflag is False: - grouptype = data - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - grouptypeflag = True - self.GroupIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - data = "" - - # element3; ---- - if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: - for vendorId, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): - for group_type, group_etc in vendor["groups"].iteritems(): - for device_item in group_etc["devices"]: - if device == device_item[1]: - data = group_etc["name"] - if data is not "" and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - groupnameflag = True - break - if groupnameflag is False: - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - groupnameflag = True - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - data = "" - - # element4; ---- - for element in device.getName(): - if element.getLcId() == 1 or element.getLcId()==1033: - data = element.getcontent() - if data is not "" and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.NameIdx = vendor_spec_strings.index(data)+1 - devnameflag = True - break - if devnameflag is False: - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - devnameflag = True - self.NameIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - data = "" - - # element5-1; ---- - if device.getcontent() is not None: - data = device.getcontent() - if data is not None and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.ImgIdx = vendor_spec_strings.index(data)+1 - imageflag = True - break - if imageflag is False: - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - imageflag = True - self.ImgIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - - # element5-2; ---- - if imageflag is False: - if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: - for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): - for group_type, group_etc in vendor["groups"].iteritems(): - for device_item in group_etc["devices"]: - if device == device_item[1]: - data = group_etc - if data is not None and type(data) == unicode: - for vendor_spec_string in vendor_spec_strings: - if data == vendor_spec_string: - self.ImgIdx = vendor_spec_strings.index(data)+1 - imageflag = True - break - if imageflag is False: - count += 1 - self.Strings.append(data) - vendor_spec_strings.append(data) - imageflag = True - self.ImgIdx = count - vendor_specific_data += "{:0>2x}".format(len(data)) - for character in range(len(data)): - vendor_specific_data += "{:0>2x}".format(ord(data[character])) - data = "" - - # DC related elements - # ------ - dc_related_elements = "" - if device.getDc() is not None: - for element in device.getDc().getOpMode(): - data = element.getName() - if data is not "": - count += 1 - self.Strings.append(data) - dc_related_elements += "{:0>2x}".format(len(data)) - for character in range(len(data)): - dc_related_elements += "{:0>2x}".format(ord(data[character])) - data = "" - - # Input elements(TxPDO) - # ----; Name - input_elements = "" - inputs = [] - for element in device.getTxPdo(): - for name in element.getName(): - data = name.getcontent() - for input in inputs: - if data == input: - data = "" - if data is not "": - count += 1 - self.Strings.append(data) - inputs.append(data) - input_elements += "{:0>2x}".format(len(data)) - for character in range(len(data)): - input_elements += "{:0>2x}".format(ord(data[character])) - data = "" - for entry in element.getEntry(): - for name in entry.getName(): - data = name.getcontent() - for input in inputs: - if data == input: - data = "" - if data is not "": - count += 1 - self.Strings.append(data) - inputs.append(data) - input_elements += "{:0>2x}".format(len(data)) - for character in range(len(data)): - input_elements += "{:0>2x}".format(ord(data[character])) - data = "" - - # Output elements(RxPDO) - # ----; Name - output_elements = "" - outputs = [] - for element in device.getRxPdo(): - for name in element.getName(): - data = name.getcontent() - for output in outputs: - if data == output: - data = "" - if data is not "": - count += 1 - self.Strings.append(data) - outputs.append(data) - output_elements += "{:0>2x}".format(len(data)) - for character in range(len(data)): - output_elements += "{:0>2x}".format(ord(data[character])) - data = "" - for entry in element.getEntry(): - for name in entry.getName(): - data = name.getcontent() - for output in outputs: - if data == output: - data = "" - if data is not "": - count += 1 - self.Strings.append(data) - outputs.append(data) - output_elements += "{:0>2x}".format(len(data)) - for character in range(len(data)): - output_elements += "{:0>2x}".format(ord(data[character])) - data = "" - - # form eeprom data - # category header - eeprom.append("0a") - eeprom.append("00") - # category length (word); 1 word is 4 bytes. "+2" is the length of string's total number - length = len(vendor_specific_data + dc_related_elements + input_elements + output_elements) + 2 - if length%4 == 0: - pass - else: - length +=length%4 - padflag = True - eeprom.append("{:0>4x}".format(length/4)[2:4]) - eeprom.append("{:0>4x}".format(length/4)[0:2]) - # total numbers of strings - eeprom.append("{:0>2x}".format(count)) - for element in [vendor_specific_data, - dc_related_elements, - input_elements, - output_elements]: - for iter in range(len(element)/2): - if element == "": - eeprom.append("00") - else: - eeprom.append(element[0:2]) - element = element[2:len(element)] - # padding if length is odd bytes - if padflag is True: - eeprom.append("ff") - - return eeprom - - def ExtractEEPROMGeneralCategory(self, device): - """ - Extract "General" category data from slave ESI XML and generate EEPROM image data. - @param device : 'device' object in the slave ESI XML - @return eeprom : "Strings" category EEPROM image data - """ - eeprom = [] - data = "" - - # category header - eeprom.append("1e") - eeprom.append("00") - - # category length - eeprom.append("10") - eeprom.append("00") - - # word 1 : Group Type index and Image index in STRINGS Category - eeprom.append("{:0>2x}".format(self.GroupIdx)) - eeprom.append("{:0>2x}".format(self.ImgIdx)) - - # word 2 : Device Type index and Device Name index in STRINGS Category - eeprom.append("{:0>2x}".format(self.OrderIdx)) - eeprom.append("{:0>2x}".format(self.NameIdx)) - - # word 3 : Physical Layer Port info. and CoE Details - eeprom.append("01") # Physical Layer Port info - assume 01 - # CoE Details; ----- - coe_details = 0 - mb = device.getMailbox() - coe_details = 1 # sdo enabled - if mb is not None : - coe = mb.getCoE() - if coe is not None: - for bit,flag in enumerate(["SdoInfo", "PdoAssign", "PdoConfig", - "PdoUpload", "CompleteAccess"]): - if getattr(coe,"get%s"%flag)() is not None: - coe_details += 1<2x}".format(coe_details)) - - # word 4 : FoE Details and EoE Details - # FoE Details; ----- - if mb is not None and mb.getFoE() is not None: - eeprom.append("01") - else: - eeprom.append("00") - # EoE Details; ----- - if mb is not None and mb.getEoE() is not None: - eeprom.append("01") - else: - eeprom.append("00") - - # word 5 : SoE Channels(reserved) and DS402 Channels - # SoE Details; ----- - if mb is not None and mb.getSoE() is not None: - eeprom.append("01") - else: - eeprom.append("00") - # DS402Channels; -----: DS402Channels - ds402ch = False - if mb is not None : - coe = mb.getCoE() - if coe is not None : - ds402ch = coe.getDS402Channels() - eeprom.append("01" if ds402ch in [True,1] else "00") - - # word 6 : SysmanClass(reserved) and Flags - eeprom.append("00") # reserved - # Flags - en_safeop = False - en_lrw = False - if device.getType().getTcCfgModeSafeOp() == True \ - or device.getType().getTcCfgModeSafeOp() == 1: - en_safeop = True - if device.getType().getUseLrdLwr() == True \ - or device.getType().getUseLrdLwr() == 1: - en_lrw = True - - flags = "0b"+"000000"+str(int(en_lrw))+str(int(en_safeop)) - eeprom.append("{:0>2x}".format(int(flags, 2))) - - # word 7 : Current On EBus (assume 0x0000) - eeprom.append("00") - eeprom.append("00") - # after word 7; couldn't analyze yet - eeprom.append("03") - eeprom.append("00") - eeprom.append("11") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - eeprom.append("00") - - return eeprom - - def ExtractEEPROMFMMUCategory(self, device): - """ - Extract "FMMU" category data from slave ESI XML and generate EEPROM image data. - @param device : 'device' object in the slave ESI XML - @return eeprom : "Strings" category EEPROM image data - """ - eeprom = [] - data = "" - count = 0 # number of FMMU - padflag = False - - for fmmu in device.getFmmu(): - count += 1 - if fmmu.getcontent() == "Outputs": - data += "01" - if fmmu.getcontent() == "Inputs": - data += "02" - if fmmu.getcontent() == "MBoxState": - data += "03" - - # construct of EEPROM data - if data is not "": - # category header - eeprom.append("28") - eeprom.append("00") - # category length - if count%2 == 1: - padflag = True - eeprom.append("{:0>4x}".format((count+1)/2)[2:4]) - eeprom.append("{:0>4x}".format((count+1)/2)[0:2]) - else: - eeprom.append("{:0>4x}".format((count)/2)[2:4]) - eeprom.append("{:0>4x}".format((count)/2)[0:2]) - for i in range(count): - if data == "": - eeprom.append("00") - else: - eeprom.append(data[0:2]) - data = data[2:len(data)] - # padding if length is odd bytes - if padflag is True: - eeprom.append("ff") - - return eeprom - - def ExtractEEPROMSyncMCategory(self, device): - """ - Extract "SyncM" category data from slave ESI XML and generate EEPROM image data. - @param device : 'device' object in the slave ESI XML - @return eeprom : "Strings" category EEPROM image data - """ - eeprom = [] - data = "" - number = {"MBoxOut":"01", "MBoxIn":"02", "Outputs":"03", "Inputs":"04"} - - for sm in device.getSm(): - for attr in [sm.getStartAddress(), - sm.getDefaultSize(), - sm.getControlByte()]: - if attr is not None: - data += "{:0>4x}".format(ExtractHexDecValue(attr))[2:4] - data += "{:0>4x}".format(ExtractHexDecValue(attr))[0:2] - else: - data += "0000" - if sm.getEnable() == "1" or sm.getEnable() == True: - data += "01" - else: - data += "00" - data += number[sm.getcontent()] - - if data is not "": - # category header - eeprom.append("29") - eeprom.append("00") - # category length - eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) - eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) - for i in range(len(data)/2): - if data == "": - eeprom.append("00") - else: - eeprom.append(data[0:2]) - data = data[2:len(data)] - - return eeprom - - def ExtractEEPROMPDOCategory(self, device, pdotype): - """ - Extract ""PDO (Tx, Rx)"" category data from slave ESI XML and generate EEPROM image data. - @param device : 'device' object in the slave ESI XML - @param pdotype : identifier whether "TxPDO" or "RxPDO". - @return eeprom : "Strings" category EEPROM image data - """ - eeprom = [] - data = "" - count = 0 - en_fixed = False - en_mandatory = False - en_virtual = False - - for element in eval("device.get%s()"%pdotype): - # PDO Index - data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[2:4] - data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[0:2] - # Number of Entries - data += "{:0>2x}".format(len(element.getEntry())) - # About Sync Manager - if element.getSm() is not None: - data += "{:0>2x}".format(element.getSm()) - else: - data += "ff" - # Reference to DC Synch (according to ET1100 documentation) - assume 0 - data += "00" - # Name Index - objname = "" - for name in element.getName(): - objname = name.getcontent() - for name in self.Strings: - count += 1 - if objname == name: - break - if len(self.Strings)+1 == count: - data += "00" - else: - data += "{:0>2x}".format(count) - count = 0 - # Flags; by Fixed, Mandatory, Virtual attributes ? - if element.getFixed() == True or 1: - en_fixed = True - if element.getMandatory() == True or 1: - en_mandatory = True - if element.getVirtual() == True or element.getVirtual(): - en_virtual = True - data += str(int(en_fixed)) + str(int(en_mandatory)) + str(int(en_virtual)) + "0" - - for entry in element.getEntry(): - # Entry Index - data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[2:4] - data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[0:2] - # Subindex - data += "{:0>2x}".format(int(entry.getSubIndex())) - # Entry Name Index - objname = "" - for name in entry.getName(): - objname = name.getcontent() - for name in self.Strings: - count += 1 - if objname == name: - break - if len(self.Strings)+1 == count: - data += "00" - else: - data += "{:0>2x}".format(count) - count = 0 - # DataType - if entry.getDataType() is not None: - if entry.getDataType().getcontent() in self.BaseDataTypeDict: - data += self.BaseDataTypeDict[entry.getDataType().getcontent()] - else: - data += "00" - else: - data += "00" - # BitLen - if entry.getBitLen() is not None: - data += "{:0>2x}".format(int(entry.getBitLen())) - else: - data += "00" - # Flags; by Fixed attributes ? - en_fixed = False - if entry.getFixed() == True or entry.getFixed() == 1: - en_fixed = True - data += str(int(en_fixed)) + "000" - - if data is not "": - # category header - if pdotype == "TxPdo": - eeprom.append("32") - elif pdotype == "RxPdo": - eeprom.append("33") - else: - eeprom.append("00") - eeprom.append("00") - # category length - eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) - eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) - data = str(data.lower()) - for i in range(len(data)/2): - if data == "": - eeprom.append("00") - else: - eeprom.append(data[0:2]) - data = data[2:len(data)] - - return eeprom - - def ExtractEEPROMDCCategory(self, device): - """ - Extract "DC(Distributed Clock)" category data from slave ESI XML and generate EEPROM image data. - @param device : 'device' object in the slave ESI XML - @return eeprom : "Strings" category EEPROM image data - """ - eeprom = [] - data = "" - count = 0 - namecount = 0 - - if device.getDc() is not None: - for element in device.getDc().getOpMode(): - count += 1 - # assume that word 1-7 are 0x0000 - data += "0000" - data += "0000" - data += "0000" - data += "0000" - data += "0000" - data += "0000" - data += "0000" - # word 8-10 - # AssignActivate - if element.getAssignActivate() is not None: - data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[2:4] - data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[0:2] - else: - data += "0000" - # Factor of CycleTimeSync0 ? and default is 1? - if element.getCycleTimeSync0() is not None: - if element.getCycleTimeSync0().getFactor() is not None: - data += "{:0>2x}".format(int(element.getCycleTimeSync0().getFactor())) - data += "00" - else: - data += "0100" - else: - data += "0100" - # Index of Name in STRINGS Category - # Name Index - objname = "" - for name in element.getName(): - objname += name - for name in self.Strings: - namecount += 1 - if objname == name: - break - if len(self.Strings)+1 == namecount: - data += "00" - else: - data += "{:0>2x}".format(namecount) - namecount = 0 - data += "00" - # assume that word 11-12 are 0x0000 - data += "0000" - data += "0000" - - if data is not "": - # category header - eeprom.append("3c") - eeprom.append("00") - # category length - eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) - eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) - data = str(data.lower()) - for i in range(len(data)/2): - if data == "": - eeprom.append("00") - else: - eeprom.append(data[0:2]) - data = data[2:len(data)] - - return eeprom - - #------------------------------------------------------------------------------- - # Used Register Access - #------------------------------------------------------------------------------- - def RegRead(self, offset, length): - """ - Read slave ESC register content using "ethercat reg_read -p %d %s %s" command. - Command example : "ethercat reg_read -p 0 0x0c00 0x0400" - @param offset : register address - @param length : register length - @return return_val : register data - """ - error, return_val = self.Controler.RemoteExec(REG_READ%(self.Controler.GetSlavePos(), offset, length), return_val = None) - return return_val - - def RegWrite(self, address, data): - """ - Write data to slave ESC register using "ethercat reg_write -p %d %s %s" command. - Command example : "ethercat reg_write -p 0 0x0c04 0x0001" - @param address : register address - @param data : data to write - @return return_val : the execution result of "ethercat reg_write" (for error check) - """ - error, return_val = self.Controler.RemoteExec(REG_WRITE%(self.Controler.GetSlavePos(), address, data), return_val = None) - return return_val - - def Rescan(self): - """ - Synchronize EEPROM data in master controller with the data in slave device after EEPROM write. - Command example : "ethercat rescan -p 0" - """ - error, return_val = self.Controler.RemoteExec(RESCAN%(self.Controler.GetSlavePos()), return_val = None) - - #------------------------------------------------------------------------------- - # Common Use Methods - #------------------------------------------------------------------------------- - def CheckConnect(self, cyclic_flag): - """ - Check connection status (1) between Beremiz and the master (2) between the master and the slave. - @param cyclic_flag: 0 - one shot, 1 - periodic - @return True or False - """ - if self.Controler.GetCTRoot()._connector is not None: - # Check connection between the master and the slave. - # Command example : "ethercat xml -p 0" - error, return_val = self.Controler.RemoteExec(SLAVE_XML%(self.Controler.GetSlavePos()), return_val = None) - number_of_lines = return_val.split("\n") - if len(number_of_lines) <= 2 : # No slave connected to the master controller - if not cyclic_flag : - self.CreateErrorDialog('No connected slaves') - return False - - elif len(number_of_lines) > 2 : - return True - else: - # The master controller is not connected to Beremiz host - if not cyclic_flag : - self.CreateErrorDialog('PLC not connected!') - return False - - def CreateErrorDialog(self, mention): - """ - Create a dialog to indicate error or warning. - @param mention : Error String - """ - app_frame = self.Controler.GetCTRoot().AppFrame - dlg = wx.MessageDialog (app_frame, mention, - ' Warning...', - wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +# This file is part of Beremiz +# +# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab. University of Seoul, Korea +# +# See COPYING file for copyrights details. + +from __future__ import absolute_import +import wx + +mailbox_protocols = ["AoE", "EoE", "CoE", "FoE", "SoE", "VoE"] + + +def ExtractHexDecValue(value): + """ + convert numerical value in string format into decimal or hex format. + @param value : hex or decimal data + @return integer data + """ + try: + return int(value) + except Exception: + pass + try: + return int(value.replace("#", "0"), 16) + + except Exception: + raise ValueError(_("Invalid value for HexDecValue \"%s\"") % value) + + +def ExtractName(names, default=None): + """ + Extract "name" field from XML entries. + @param names : XML entry + @default : if it fails to extract from the designated XML entry, return the default value ("None"). + @return default or the name extracted + """ + if len(names) == 1: + return names[0].getcontent() + else: + for name in names: + if name.getLcId() == 1033: + return name.getcontent() + return default + +# -------------------------------------------------- +# Remote Exec Etherlab Commands +# -------------------------------------------------- + + +# --------------------- for master --------------------------- +MASTER_STATE = """ +import commands +result = commands.getoutput("ethercat master") +returnVal =result +""" + +# --------------------- for slave ---------------------------- +# ethercat state -p (slave position) (state (INIT, PREOP, SAFEOP, OP)) +SLAVE_STATE = """ +import commands +result = commands.getoutput("ethercat state -p %d %s") +returnVal = result +""" + +# ethercat slave +GET_SLAVE = """ +import commands +result = commands.getoutput("ethercat slaves") +returnVal =result +""" + +# ethercat xml -p (slave position) +SLAVE_XML = """ +import commands +result = commands.getoutput("ethercat xml -p %d") +returnVal = result +""" + +# ethercat sdos -p (slave position) +SLAVE_SDO = """ +import commands +result = commands.getoutput("ethercat sdos -p %d") +returnVal =result +""" + +# ethercat upload -p (slave position) (main index) (sub index) +GET_SLOW_SDO = """ +import commands +result = commands.getoutput("ethercat upload -p %d %s %s") +returnVal =result +""" + +# ethercat download -p (slave position) (main index) (sub index) (value) +SDO_DOWNLOAD = """ +import commands +result = commands.getoutput("ethercat download --type %s -p %d %s %s %s") +returnVal =result +""" + +# ethercat sii_read -p (slave position) +SII_READ = """ +import commands +result = commands.getoutput("ethercat sii_read -p %d") +returnVal =result +""" + +# ethercat reg_read -p (slave position) (address) (size) +REG_READ = """ +import commands +result = commands.getoutput("ethercat reg_read -p %d %s %s") +returnVal =result +""" + +# ethercat sii_write -p (slave position) - (contents) +SII_WRITE = """ +import subprocess +process = subprocess.Popen( + ["ethercat", "-f", "sii_write", "-p", "%d", "-"], + stdin=subprocess.PIPE) +process.communicate(sii_data) +returnVal = process.returncode +""" + +# ethercat reg_write -p (slave position) -t (uinit16) (address) (data) +REG_WRITE = """ +import commands +result = commands.getoutput("ethercat reg_write -p %d -t uint16 %s %s") +returnVal =result +""" + +# ethercat rescan -p (slave position) +RESCAN = """ +import commands +result = commands.getoutput("ethercat rescan -p %d") +returnVal =result +""" + + +# -------------------------------------------------- +# Common Method For EtherCAT Management +# -------------------------------------------------- +class _CommonSlave(object): + + # ----- Data Structure for ethercat management ---- + SlaveState = "" + + # category of SDO data + DatatypeDescription, CommunicationObject, ManufacturerSpecific, \ + ProfileSpecific, Reserved, AllSDOData = range(6) + + # store the execution result of "ethercat sdos" command into SaveSDOData. + SaveSDOData = [] + + # Flags for checking "write" permission of OD entries + CheckPREOP = False + CheckSAFEOP = False + CheckOP = False + + # Save PDO Data + TxPDOInfo = [] + TxPDOCategory = [] + RxPDOInfo = [] + RxPDOCategory = [] + + # Save EEPROM Data + SiiData = "" + + # Save Register Data + RegData = "" + CrtRegSpec = {"ESCType": "", + "FMMUNumber": "", + "SMNumber": "", + "PDIType": ""} + + def __init__(self, controler): + """ + Constructor + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + self.Controler = controler + + self.ClearSDODataSet() + + # ------------------------------------------------------------------------------- + # Used Master State + # ------------------------------------------------------------------------------- + def GetMasterState(self): + """ + Execute "ethercat master" command and parse the execution result + @return MasterState + """ + + # exectute "ethercat master" command + _error, return_val = self.Controler.RemoteExec(MASTER_STATE, return_val=None) + master_state = {} + # parse the reslut + for each_line in return_val.splitlines(): + if len(each_line) > 0: + chunks = each_line.strip().split(':', 1) + key = chunks[0] + value = [] + if len(chunks) > 1: + value = chunks[1].split() + if '(attached)' in value: + value.remove('(attached)') + master_state[key] = value + + return master_state + + # ------------------------------------------------------------------------------- + # Used Slave State + # ------------------------------------------------------------------------------- + def RequestSlaveState(self, command): + """ + Set slave state to the specified one using "ethercat states -p %d %s" command. + Command example : "ethercat states -p 0 PREOP" (target slave position and target state are given.) + @param command : target slave state + """ + _error, _return_val = self.Controler.RemoteExec( + SLAVE_STATE % (self.Controler.GetSlavePos(), command), + return_val=None) + + def GetSlaveStateFromSlave(self): + """ + Get slave information using "ethercat slaves" command and store the information into internal data structure + (self.SlaveState) for "Slave State" + return_val example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100) + """ + _error, return_val = self.Controler.RemoteExec(GET_SLAVE, return_val=None) + self.SlaveState = return_val + return return_val + + # ------------------------------------------------------------------------------- + # Used SDO Management + # ------------------------------------------------------------------------------- + def GetSlaveSDOFromSlave(self): + """ + Get SDO objects information of current slave using "ethercat sdos -p %d" command. + Command example : "ethercat sdos -p 0" + @return return_val : execution results of "ethercat sdos" command (need to be parsed later) + """ + _error, return_val = self.Controler.RemoteExec(SLAVE_SDO % (self.Controler.GetSlavePos()), return_val=None) + return return_val + + def SDODownload(self, data_type, idx, sub_idx, value): + """ + Set an SDO object value to user-specified value using "ethercat download" command. + Command example : "ethercat download --type int32 -p 0 0x8020 0x12 0x00000000" + @param data_type : data type of SDO entry + @param idx : index of the SDO entry + @param sub_idx : subindex of the SDO entry + @param value : value of SDO entry + """ + _error, _return_val = self.Controler.RemoteExec( + SDO_DOWNLOAD % (data_type, self.Controler.GetSlavePos(), idx, sub_idx, value), + return_val=None) + + def BackupSDODataSet(self): + """ + Back-up current SDO entry information to restore the SDO data + in case that the user cancels SDO update operation. + """ + self.BackupDatatypeDescription = self.SaveDatatypeDescription + self.BackupCommunicationObject = self.SaveCommunicationObject + self.BackupManufacturerSpecific = self.SaveManufacturerSpecific + self.BackupProfileSpecific = self.SaveProfileSpecific + self.BackupReserved = self.SaveReserved + self.BackupAllSDOData = self.SaveAllSDOData + + def ClearSDODataSet(self): + """ + Clear the specified SDO entry information. + """ + for dummy in range(6): + self.SaveSDOData.append([]) + + # ------------------------------------------------------------------------------- + # Used PDO Monitoring + # ------------------------------------------------------------------------------- + def RequestPDOInfo(self): + """ + Load slave information from RootClass (XML data) and parse the information (calling SlavePDOData() method). + """ + # Load slave information from ESI XML file (def EthercatMaster.py) + slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) + + type_infos = slave.getType() + device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) + # Initialize PDO data set + self.ClearDataSet() + + # if 'device' object is valid, call SavePDOData() to parse PDO data + if device is not None: + self.SavePDOData(device) + + def SavePDOData(self, device): + """ + Parse PDO data and store the results in TXPDOCategory and RXPDOCategory + Tx(Rx)PDOCategory : index, name, entry number + Tx(Rx)Info : entry index, sub index, name, length, type + @param device : Slave information extracted from ESI XML file + """ + # Parsing TXPDO entries + for pdo, _pdo_info in ([(pdo, "Inputs") for pdo in device.getTxPdo()]): + # Save pdo_index, entry, and name of each entry + pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) + entries = pdo.getEntry() + pdo_name = ExtractName(pdo.getName()) + + # Initialize entry number count + count = 0 + + # Parse entries + for entry in entries: + # Save index and subindex + index = ExtractHexDecValue(entry.getIndex().getcontent()) + subindex = ExtractHexDecValue(entry.getSubIndex()) + # if entry name exists, save entry data + if ExtractName(entry.getName()) is not None: + entry_infos = { + "entry_index": index, + "subindex": subindex, + "name": ExtractName(entry.getName()), + "bitlen": entry.getBitLen(), + "type": entry.getDataType().getcontent() + } + self.TxPDOInfo.append(entry_infos) + count += 1 + + categorys = {"pdo_index": pdo_index, "name": pdo_name, "number_of_entry": count} + self.TxPDOCategory.append(categorys) + + # Parsing RxPDO entries + for pdo, _pdo_info in ([(rxpdo, "Outputs") for rxpdo in device.getRxPdo()]): + # Save pdo_index, entry, and name of each entry + pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) + entries = pdo.getEntry() + pdo_name = ExtractName(pdo.getName()) + + # Initialize entry number count + count = 0 + + # Parse entries + for entry in entries: + # Save index and subindex + index = ExtractHexDecValue(entry.getIndex().getcontent()) + subindex = ExtractHexDecValue(entry.getSubIndex()) + # if entry name exists, save entry data + if ExtractName(entry.getName()) is not None: + entry_infos = { + "entry_index": index, + "subindex": subindex, + "name": ExtractName(entry.getName()), + "bitlen": str(entry.getBitLen()), + "type": entry.getDataType().getcontent() + } + self.RxPDOInfo.append(entry_infos) + count += 1 + + categorys = {"pdo_index": pdo_index, "name": pdo_name, "number_of_entry": count} + self.RxPDOCategory.append(categorys) + + def GetTxPDOCategory(self): + """ + Get TxPDOCategory data structure (Meta informaton of TxPDO). + TxPDOCategorys : index, name, number of entries + @return TxPDOCategorys + """ + return self.TxPDOCategory + + def GetRxPDOCategory(self): + """ + Get RxPDOCategory data structure (Meta information of RxPDO). + RxPDOCategorys : index, name, number of entries + @return RxPDOCategorys + """ + return self.RxPDOCategory + + def GetTxPDOInfo(self): + """ + Get TxPDOInfo data structure (Detailed information on TxPDO entries). + TxPDOInfos : entry index, sub index, name, length, type + @return TxPDOInfos + """ + return self.TxPDOInfo + + def GetRxPDOInfo(self): + """ + Get RxPDOInfo data structure (Detailed information on RxPDO entries). + RxPDOInfos : entry index, sub index, name, length, type + @return RxPDOInfos + """ + return self.RxPDOInfo + + def ClearDataSet(self): + """ + Initialize PDO management data structure. + """ + self.TxPDOInfos = [] + self.TxPDOCategorys = [] + self.RxPDOInfos = [] + self.RxPDOCategorys = [] + + # ------------------------------------------------------------------------------- + # Used EEPROM Management + # ------------------------------------------------------------------------------- + # Base data types in ETG2000; format = {"Name": "BitSize"} + BaseDataTypeDict = {"BOOL": "01", + "SINT": "02", + "INT": "03", + "DINT": "04", + "USINT": "05", + "UINT": "06", + "UDINT": "07", + "REAL": "08", + "INT24": "10", + "LREAL": "11", + "INT40": "12", + "INT48": "13", + "INT56": "14", + "LINT": "15", + "UINT24": "16", + "UINT40": "18", + "UINT48": "19", + "UINT56": "1a", + "ULINT": "1b", + "BITARR8": "2d", + "BITARR16": "2e", + "BITARR32": "2f", + "BIT1": "30", + "BIT2": "31", + "BIT3": "32", + "BIT4": "33", + "BIT5": "34", + "BIT6": "35", + "BIT7": "36", + "BIT8": "37"} + + def GetSmartViewInfos(self): + """ + Parse XML data for "Smart View" of EEPROM contents. + @return smartview_infos : EEPROM contents dictionary + """ + + smartview_infos = {"eeprom_size": 128, + "pdi_type": 0, + "device_emulation": "False", + "vendor_id": '0x00000000', + "product_code": '0x00000000', + "revision_no": '0x00000000', + "serial_no": '0x00000000', + "supported_mailbox": "", + "mailbox_bootstrapconf_outstart": '0', + "mailbox_bootstrapconf_outlength": '0', + "mailbox_bootstrapconf_instart": '0', + "mailbox_bootstrapconf_inlength": '0', + "mailbox_standardconf_outstart": '0', + "mailbox_standardconf_outlength": '0', + "mailbox_standardconf_instart": '0', + "mailbox_standardconf_inlength": '0'} + + slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) + type_infos = slave.getType() + device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) + + # 'device' represents current slave device selected by user + if device is not None: + for eeprom_element in device.getEeprom().getcontent(): + # get EEPROM size; -- + if eeprom_element["name"] == "ByteSize": + smartview_infos["eeprom_size"] = eeprom_element + + elif eeprom_element["name"] == "ConfigData": + configData_data = self.DecimalToHex(eeprom_element) + # get PDI type; -- address 0x00 + smartview_infos["pdi_type"] = int(configData_data[0:2], 16) + # get state of device emulation; -- address 0x01 + if "{:0>8b}".format(int(configData_data[2:4], 16))[7] == '1': + smartview_infos["device_emulation"] = "True" + + elif eeprom_element["name"] == "BootStrap": + bootstrap_data = "{:0>16x}".format(eeprom_element) + # get bootstrap configuration; -- + for cfg, iter in [("mailbox_bootstrapconf_outstart", 0), + ("mailbox_bootstrapconf_outlength", 1), + ("mailbox_bootstrapconf_instart", 2), + ("mailbox_bootstrapconf_inlength", 3)]: + smartview_infos[cfg] = str(int(bootstrap_data[4*iter+2:4*(iter+1)]+bootstrap_data[4*iter:4*iter+2], 16)) + + # get protocol (profile) types supported by mailbox; - + mb = device.getMailbox() + if mb is not None: + for mailbox_protocol in mailbox_protocols: + if getattr(mb, "get%s" % mailbox_protocol)() is not None: + smartview_infos["supported_mailbox"] += "%s, " % mailbox_protocol + smartview_infos["supported_mailbox"] = smartview_infos["supported_mailbox"].strip(", ") + + # get standard configuration of mailbox; - + for sm_element in device.getSm(): + if sm_element.getcontent() == "MBoxOut": + smartview_infos["mailbox_standardconf_outstart"] = str(ExtractHexDecValue(sm_element.getStartAddress())) + smartview_infos["mailbox_standardconf_outlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize())) + elif sm_element.getcontent() == "MBoxIn": + smartview_infos["mailbox_standardconf_instart"] = str(ExtractHexDecValue(sm_element.getStartAddress())) + smartview_infos["mailbox_standardconf_inlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize())) + else: + pass + + # get device identity from - + # vendor ID; by default, pre-defined value in self.ModulesLibrary + # if device type in 'vendor' item equals to actual slave device type, set 'vendor_id' to vendor ID. + for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): + for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]: + if available_device[0] == type_infos["device_type"]: + smartview_infos["vendor_id"] = "0x" + "{:0>8x}".format(vendor_id) + + # product code; + if device.getType().getProductCode() is not None: + product_code = device.getType().getProductCode() + smartview_infos["product_code"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(product_code)) + + # revision number; + if device.getType().getRevisionNo() is not None: + revision_no = device.getType().getRevisionNo() + smartview_infos["revision_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(revision_no)) + + # serial number; + if device.getType().getSerialNo() is not None: + serial_no = device.getType().getSerialNo() + smartview_infos["serial_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(serial_no)) + + return smartview_infos + + else: + return None + + def DecimalToHex(self, decnum): + """ + Convert decimal value into hexadecimal representation. + @param decnum : decimal value + @return hex_data : hexadecimal representation of input value in decimal + """ + value = "%x" % decnum + value_len = len(value) + if (value_len % 2) == 0: + hex_len = value_len + else: + hex_len = (value_len / 2) * 2 + 2 + + hex_data = ("{:0>"+str(hex_len)+"x}").format(decnum) + + return hex_data + + def SiiRead(self): + """ + Get slave EEPROM contents maintained by master device using "ethercat sii_read -p %d" command. + Command example : "ethercat sii_read -p 0" + @return return_val : result of "ethercat sii_read" (binary data) + """ + _error, return_val = self.Controler.RemoteExec(SII_READ % (self.Controler.GetSlavePos()), return_val=None) + self.SiiData = return_val + return return_val + + def SiiWrite(self, binary): + """ + Overwrite slave EEPROM contents using "ethercat sii_write -p %d" command. + Command example : "ethercat sii_write -p 0 - (binary contents)" + @param binary : EEPROM contents in binary data format + @return return_val : result of "ethercat sii_write" (If it succeeds, the return value is NULL.) + """ + _error, return_val = self.Controler.RemoteExec( + SII_WRITE % (self.Controler.GetSlavePos()), + return_val=None, + sii_data=binary) + return return_val + + def LoadData(self): + """ + Loading data from EEPROM use Sii_Read Method + @return self.BinaryCode : slave EEPROM data in binary format (zero-padded) + """ + return_val = self.Controler.CommonMethod.SiiRead() + self.BinaryCode = return_val + self.Controler.SiiData = self.BinaryCode + + # append zero-filled padding data up to EEPROM size + for dummy in range(self.SmartViewInfosFromXML["eeprom_size"] - len(self.BinaryCode)): + self.BinaryCode = self.BinaryCode + 'ff'.decode('hex') + + return self.BinaryCode + + def HexRead(self, binary): + """ + Convert binary digit representation into hexadecimal representation for "Hex View" menu. + @param binary : binary digits + @return hexCode : hexadecimal digits + @return hexview_table_row, hexview_table_col : Grid size for "Hex View" UI + """ + row_code = [] + row_text = "" + row = 0 + hex_code = [] + + hexview_table_col = 17 + + for index in range(0, len(binary)): + if len(binary[index]) != 1: + break + else: + digithexstr = hex(ord(binary[index])) + + tempvar2 = digithexstr[2:4] + if len(tempvar2) == 1: + tempvar2 = "0" + tempvar2 + row_code.append(tempvar2) + + if int(digithexstr, 16) >= 32 and int(digithexstr, 16) <= 126: + row_text = row_text + chr(int(digithexstr, 16)) + else: + row_text = row_text + "." + + if index != 0: + if len(row_code) == (hexview_table_col - 1): + row_code.append(row_text) + hex_code.append(row_code) + row_text = "" + row_code = [] + row = row + 1 + + hexview_table_row = row + + return hex_code, hexview_table_row, hexview_table_col + + def GenerateEEPROMList(self, data, direction, length): + """ + Generate EEPROM data list by reconstructing 'data' string. + example : data="12345678", direction=0, length=8 -> eeprom_list=['12', '34', '56', '78'] + data="12345678", direction=1, length=8 -> eeprom_list=['78', '56', '34', '12'] + @param data : string to be reconstructed + @param direction : endianness + @param length : data length + @return eeprom_list : reconstructed list data structure + """ + eeprom_list = [] + + if direction is 0 or 1: + for dummy in range(length/2): + if data == "": + eeprom_list.append("00") + else: + eeprom_list.append(data[direction*(length-2):direction*(length-2)+2]) + data = data[(1-direction)*2:length-direction*2] + length -= 2 + return eeprom_list + + def XmlToEeprom(self): + """ + Extract slave EEPROM contents using slave ESI XML file. + - Mandatory parts + - String category : ExtractEEPROMStringCategory() + - General category : ExtractEEPROMGeneralCategory() + - FMMU category : ExtractEEPROMFMMUCategory + - SyncM category : ExtractEEPROMSyncMCategory() + - Tx/RxPDO category : ExtractEEPROMPDOCategory() + - DC category : ExtractEEPROMDCCategory() + @return eeprom_binary + """ + eeprom = [] + data = "" + eeprom_size = 0 + eeprom_binary = "" + + # 'device' is the slave device of the current EtherCAT slave plugin + slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos()) + type_infos = slave.getType() + device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos) + + if device is not None: + # get ConfigData for EEPROM offset 0x0000-0x000d; -- + for eeprom_element in device.getEeprom().getcontent(): + if eeprom_element["name"] == "ConfigData": + data = self.DecimalToHex(eeprom_element) + eeprom += self.GenerateEEPROMList(data, 0, 28) + + # calculate CRC for EEPROM offset 0x000e-0x000f + crc = 0x48 + for segment in eeprom: + for i in range(8): + bit = crc & 0x80 + crc = (crc << 1) | ((int(segment, 16) >> (7 - i)) & 0x01) + if bit: + crc ^= 0x07 + for dummy in range(8): + bit = crc & 0x80 + crc <<= 1 + if bit: + crc ^= 0x07 + eeprom.append(hex(crc)[len(hex(crc))-3:len(hex(crc))-1]) + eeprom.append("00") + + # get VendorID for EEPROM offset 0x0010-0x0013; + data = "" + for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): + for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]: + if available_device[0] == type_infos["device_type"]: + data = "{:0>8x}".format(vendor_id) + eeprom += self.GenerateEEPROMList(data, 1, 8) + + # get Product Code for EEPROM offset 0x0014-0x0017; + data = "" + if device.getType().getProductCode() is not None: + data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getProductCode())) + eeprom += self.GenerateEEPROMList(data, 1, 8) + + # get Revision Number for EEPROM offset 0x0018-0x001b; + data = "" + if device.getType().getRevisionNo() is not None: + data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getRevisionNo())) + eeprom += self.GenerateEEPROMList(data, 1, 8) + + # get Serial Number for EEPROM 0x001c-0x001f; + data = "" + if device.getType().getSerialNo() is not None: + data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getSerialNo())) + eeprom += self.GenerateEEPROMList(data, 1, 8) + + # get Execution Delay for EEPROM 0x0020-0x0021; not analyzed yet + eeprom.append("00") + eeprom.append("00") + + # get Port0/1 Delay for EEPROM offset 0x0022-0x0025; not analyzed yet + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + + # reserved for EEPROM offset 0x0026-0x0027; + eeprom.append("00") + eeprom.append("00") + + # get BootStrap for EEPROM offset 0x0028-0x002e; -- + data = "" + for eeprom_element in device.getEeprom().getcontent(): + if eeprom_element["name"] == "BootStrap": + data = "{:0>16x}".format(eeprom_element) + eeprom += self.GenerateEEPROMList(data, 0, 16) + + # get Standard Mailbox for EEPROM offset 0x0030-0x0037; - + data = "" + standard_send_mailbox_offset = None + standard_send_mailbox_size = None + standard_receive_mailbox_offset = None + standard_receive_mailbox_size = None + for sm_element in device.getSm(): + if sm_element.getcontent() == "MBoxOut": + standard_receive_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress())) + standard_receive_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize())) + elif sm_element.getcontent() == "MBoxIn": + standard_send_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress())) + standard_send_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize())) + + if standard_receive_mailbox_offset is None: + eeprom.append("00") + eeprom.append("00") + else: + eeprom.append(standard_receive_mailbox_offset[2:4]) + eeprom.append(standard_receive_mailbox_offset[0:2]) + if standard_receive_mailbox_size is None: + eeprom.append("00") + eeprom.append("00") + else: + eeprom.append(standard_receive_mailbox_size[2:4]) + eeprom.append(standard_receive_mailbox_size[0:2]) + if standard_send_mailbox_offset is None: + eeprom.append("00") + eeprom.append("00") + else: + eeprom.append(standard_send_mailbox_offset[2:4]) + eeprom.append(standard_send_mailbox_offset[0:2]) + if standard_send_mailbox_size is None: + eeprom.append("00") + eeprom.append("00") + else: + eeprom.append(standard_send_mailbox_size[2:4]) + eeprom.append(standard_send_mailbox_size[0:2]) + + # get supported mailbox protocols for EEPROM offset 0x0038-0x0039; + data = 0 + mb = device.getMailbox() + if mb is not None: + for bit, mbprot in enumerate(mailbox_protocols): + if getattr(mb, "get%s" % mbprot)() is not None: + data += 1 << bit + data = "{:0>4x}".format(data) + eeprom.append(data[2:4]) + eeprom.append(data[0:2]) + + # resereved for EEPROM offset 0x003a-0x007b; + for i in range(0x007b-0x003a+0x0001): + eeprom.append("00") + + # get EEPROM size for EEPROM offset 0x007c-0x007d; + data = "" + for eeprom_element in device.getEeprom().getcontent(): + if eeprom_element["name"] == "ByteSize": + eeprom_size = int(str(eeprom_element)) + data = "{:0>4x}".format(int(eeprom_element)/1024*8-1) + + if data == "": + eeprom.append("00") + eeprom.append("00") + else: + eeprom.append(data[2:4]) + eeprom.append(data[0:2]) + + # Version for EEPROM 0x007e-0x007f; + # According to "EtherCAT Slave Device Description(V0.3.0)" + eeprom.append("01") + eeprom.append("00") + + # append String Category data + for data in self.ExtractEEPROMStringCategory(device): + eeprom.append(data) + + # append General Category data + for data in self.ExtractEEPROMGeneralCategory(device): + eeprom.append(data) + + # append FMMU Category data + for data in self.ExtractEEPROMFMMUCategory(device): + eeprom.append(data) + + # append SyncM Category data + for data in self.ExtractEEPROMSyncMCategory(device): + eeprom.append(data) + + # append TxPDO Category data + for data in self.ExtractEEPROMPDOCategory(device, "TxPdo"): + eeprom.append(data) + + # append RxPDO Category data + for data in self.ExtractEEPROMPDOCategory(device, "RxPdo"): + eeprom.append(data) + + # append DC Category data + for data in self.ExtractEEPROMDCCategory(device): + eeprom.append(data) + + # append padding + padding = eeprom_size-len(eeprom) + for i in range(padding): + eeprom.append("ff") + + # convert binary code + for index in range(eeprom_size): + eeprom_binary = eeprom_binary + eeprom[index].decode('hex') + + return eeprom_binary + + def ExtractEEPROMStringCategory(self, device): + """ + Extract "Strings" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + self.Strings = [] + data = "" + count = 0 # string counter + padflag = False # padding flag if category length is odd + + # index information for General Category in EEPROM + self.GroupIdx = 0 + self.ImgIdx = 0 + self.OrderIdx = 0 + self.NameIdx = 0 + + # flag for preventing duplicated vendor specific data + typeflag = False + grouptypeflag = False + groupnameflag = False + devnameflag = False + imageflag = False + + # vendor specific data + # element1; ---- + # vendor_specific_data : vendor specific data (binary type) + vendor_specific_data = "" + # vendor_spec_strings : list of vendor specific "strings" for preventing duplicated strings + vendor_spec_strings = [] + for element in device.getType().getcontent(): + data += element + if data != "" and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.OrderIdx = vendor_spec_strings.index(data)+1 + typeflag = True + break + if typeflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + typeflag = True + self.OrderIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + data = "" + + # element2-1; ---- + data = device.getGroupType() + if data is not None and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.GroupIdx = vendor_spec_strings.index(data)+1 + grouptypeflag = True + break + if grouptypeflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + grouptypeflag = True + self.GroupIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + + # element2-2; --- + if grouptypeflag is False: + if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: + for _vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): + for group_type, group_etc in vendor["groups"].iteritems(): + for device_item in group_etc["devices"]: + if device == device_item[1]: + data = group_type + if data is not None and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.GroupIdx = vendor_spec_strings.index(data)+1 + grouptypeflag = True + break + if grouptypeflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + grouptypeflag = True + self.GroupIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + data = "" + + # element3; ---- + if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: + for _vendorId, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): + for group_type, group_etc in vendor["groups"].iteritems(): + for device_item in group_etc["devices"]: + if device == device_item[1]: + data = group_etc["name"] + if data != "" and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + groupnameflag = True + break + if groupnameflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + groupnameflag = True + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + data = "" + + # element4; ---- + for element in device.getName(): + if element.getLcId() == 1 or element.getLcId() == 1033: + data = element.getcontent() + if data != "" and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.NameIdx = vendor_spec_strings.index(data)+1 + devnameflag = True + break + if devnameflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + devnameflag = True + self.NameIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + data = "" + + # element5-1; ---- + if device.getcontent() is not None: + data = device.getcontent() + if data is not None and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.ImgIdx = vendor_spec_strings.index(data)+1 + imageflag = True + break + if imageflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + imageflag = True + self.ImgIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + + # element5-2; ---- + if imageflag is False: + if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None: + for _vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems(): + for group_type, group_etc in vendor["groups"].iteritems(): + for device_item in group_etc["devices"]: + if device == device_item[1]: + data = group_etc + if data is not None and isinstance(data, unicode): + for vendor_spec_string in vendor_spec_strings: + if data == vendor_spec_string: + self.ImgIdx = vendor_spec_strings.index(data)+1 + imageflag = True + break + if imageflag is False: + count += 1 + self.Strings.append(data) + vendor_spec_strings.append(data) + imageflag = True + self.ImgIdx = count + vendor_specific_data += "{:0>2x}".format(len(data)) + for character in range(len(data)): + vendor_specific_data += "{:0>2x}".format(ord(data[character])) + data = "" + + # DC related elements + # ------ + dc_related_elements = "" + if device.getDc() is not None: + for element in device.getDc().getOpMode(): + data = element.getName() + if data != "": + count += 1 + self.Strings.append(data) + dc_related_elements += "{:0>2x}".format(len(data)) + for character in range(len(data)): + dc_related_elements += "{:0>2x}".format(ord(data[character])) + data = "" + + # Input elements(TxPDO) + # ----; Name + input_elements = "" + inputs = [] + for element in device.getTxPdo(): + for name in element.getName(): + data = name.getcontent() + for input in inputs: + if data == input: + data = "" + if data != "": + count += 1 + self.Strings.append(data) + inputs.append(data) + input_elements += "{:0>2x}".format(len(data)) + for character in range(len(data)): + input_elements += "{:0>2x}".format(ord(data[character])) + data = "" + for entry in element.getEntry(): + for name in entry.getName(): + data = name.getcontent() + for input in inputs: + if data == input: + data = "" + if data != "": + count += 1 + self.Strings.append(data) + inputs.append(data) + input_elements += "{:0>2x}".format(len(data)) + for character in range(len(data)): + input_elements += "{:0>2x}".format(ord(data[character])) + data = "" + + # Output elements(RxPDO) + # ----; Name + output_elements = "" + outputs = [] + for element in device.getRxPdo(): + for name in element.getName(): + data = name.getcontent() + for output in outputs: + if data == output: + data = "" + if data != "": + count += 1 + self.Strings.append(data) + outputs.append(data) + output_elements += "{:0>2x}".format(len(data)) + for character in range(len(data)): + output_elements += "{:0>2x}".format(ord(data[character])) + data = "" + for entry in element.getEntry(): + for name in entry.getName(): + data = name.getcontent() + for output in outputs: + if data == output: + data = "" + if data != "": + count += 1 + self.Strings.append(data) + outputs.append(data) + output_elements += "{:0>2x}".format(len(data)) + for character in range(len(data)): + output_elements += "{:0>2x}".format(ord(data[character])) + data = "" + + # form eeprom data + # category header + eeprom.append("0a") + eeprom.append("00") + # category length (word); 1 word is 4 bytes. "+2" is the length of string's total number + length = len(vendor_specific_data + dc_related_elements + input_elements + output_elements) + 2 + if length % 4 == 0: + pass + else: + length += length % 4 + padflag = True + eeprom.append("{:0>4x}".format(length/4)[2:4]) + eeprom.append("{:0>4x}".format(length/4)[0:2]) + # total numbers of strings + eeprom.append("{:0>2x}".format(count)) + for element in [vendor_specific_data, + dc_related_elements, + input_elements, + output_elements]: + for dummy in range(len(element)/2): + if element == "": + eeprom.append("00") + else: + eeprom.append(element[0:2]) + element = element[2:len(element)] + # padding if length is odd bytes + if padflag is True: + eeprom.append("ff") + + return eeprom + + def ExtractEEPROMGeneralCategory(self, device): + """ + Extract "General" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + + # category header + eeprom.append("1e") + eeprom.append("00") + + # category length + eeprom.append("10") + eeprom.append("00") + + # word 1 : Group Type index and Image index in STRINGS Category + eeprom.append("{:0>2x}".format(self.GroupIdx)) + eeprom.append("{:0>2x}".format(self.ImgIdx)) + + # word 2 : Device Type index and Device Name index in STRINGS Category + eeprom.append("{:0>2x}".format(self.OrderIdx)) + eeprom.append("{:0>2x}".format(self.NameIdx)) + + # word 3 : Physical Layer Port info. and CoE Details + eeprom.append("01") # Physical Layer Port info - assume 01 + # CoE Details; ----- + coe_details = 0 + mb = device.getMailbox() + coe_details = 1 # sdo enabled + if mb is not None: + coe = mb.getCoE() + if coe is not None: + for bit, flag in enumerate(["SdoInfo", "PdoAssign", "PdoConfig", + "PdoUpload", "CompleteAccess"]): + if getattr(coe, "get%s" % flag)() is not None: + coe_details += 1 << bit + eeprom.append("{:0>2x}".format(coe_details)) + + # word 4 : FoE Details and EoE Details + # FoE Details; ----- + if mb is not None and mb.getFoE() is not None: + eeprom.append("01") + else: + eeprom.append("00") + # EoE Details; ----- + if mb is not None and mb.getEoE() is not None: + eeprom.append("01") + else: + eeprom.append("00") + + # word 5 : SoE Channels(reserved) and DS402 Channels + # SoE Details; ----- + if mb is not None and mb.getSoE() is not None: + eeprom.append("01") + else: + eeprom.append("00") + # DS402Channels; -----: DS402Channels + ds402ch = False + if mb is not None: + coe = mb.getCoE() + if coe is not None: + ds402ch = coe.getDS402Channels() + eeprom.append("01" if ds402ch in [True, 1] else "00") + + # word 6 : SysmanClass(reserved) and Flags + eeprom.append("00") # reserved + # Flags + en_safeop = False + en_lrw = False + if device.getType().getTcCfgModeSafeOp() is True \ + or device.getType().getTcCfgModeSafeOp() == 1: + en_safeop = True + if device.getType().getUseLrdLwr() is True \ + or device.getType().getUseLrdLwr() == 1: + en_lrw = True + + flags = "0b"+"000000"+str(int(en_lrw))+str(int(en_safeop)) + eeprom.append("{:0>2x}".format(int(flags, 2))) + + # word 7 : Current On EBus (assume 0x0000) + eeprom.append("00") + eeprom.append("00") + # after word 7; couldn't analyze yet + eeprom.append("03") + eeprom.append("00") + eeprom.append("11") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + eeprom.append("00") + + return eeprom + + def ExtractEEPROMFMMUCategory(self, device): + """ + Extract "FMMU" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + data = "" + count = 0 # number of FMMU + padflag = False + + for fmmu in device.getFmmu(): + count += 1 + if fmmu.getcontent() == "Outputs": + data += "01" + if fmmu.getcontent() == "Inputs": + data += "02" + if fmmu.getcontent() == "MBoxState": + data += "03" + + # construct of EEPROM data + if data != "": + # category header + eeprom.append("28") + eeprom.append("00") + # category length + if count % 2 == 1: + padflag = True + eeprom.append("{:0>4x}".format((count+1)/2)[2:4]) + eeprom.append("{:0>4x}".format((count+1)/2)[0:2]) + else: + eeprom.append("{:0>4x}".format((count)/2)[2:4]) + eeprom.append("{:0>4x}".format((count)/2)[0:2]) + for dummy in range(count): + if data == "": + eeprom.append("00") + else: + eeprom.append(data[0:2]) + data = data[2:len(data)] + # padding if length is odd bytes + if padflag is True: + eeprom.append("ff") + + return eeprom + + def ExtractEEPROMSyncMCategory(self, device): + """ + Extract "SyncM" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + data = "" + number = {"MBoxOut": "01", "MBoxIn": "02", "Outputs": "03", "Inputs": "04"} + + for sm in device.getSm(): + for attr in [sm.getStartAddress(), + sm.getDefaultSize(), + sm.getControlByte()]: + if attr is not None: + data += "{:0>4x}".format(ExtractHexDecValue(attr))[2:4] + data += "{:0>4x}".format(ExtractHexDecValue(attr))[0:2] + else: + data += "0000" + if sm.getEnable() == "1" or sm.getEnable() is True: + data += "01" + else: + data += "00" + data += number[sm.getcontent()] + + if data != "": + # category header + eeprom.append("29") + eeprom.append("00") + # category length + eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) + eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) + for dummy in range(len(data)/2): + if data == "": + eeprom.append("00") + else: + eeprom.append(data[0:2]) + data = data[2:len(data)] + + return eeprom + + def ExtractEEPROMPDOCategory(self, device, pdotype): + """ + Extract ""PDO (Tx, Rx)"" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @param pdotype : identifier whether "TxPDO" or "RxPDO". + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + data = "" + count = 0 + en_fixed = False + en_mandatory = False + en_virtual = False + + for element in eval("device.get%s()" % pdotype): + # PDO Index + data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[2:4] + data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[0:2] + # Number of Entries + data += "{:0>2x}".format(len(element.getEntry())) + # About Sync Manager + if element.getSm() is not None: + data += "{:0>2x}".format(element.getSm()) + else: + data += "ff" + # Reference to DC Synch (according to ET1100 documentation) - assume 0 + data += "00" + # Name Index + objname = "" + for name in element.getName(): + objname = name.getcontent() + for name in self.Strings: + count += 1 + if objname == name: + break + if len(self.Strings)+1 == count: + data += "00" + else: + data += "{:0>2x}".format(count) + count = 0 + # Flags; by Fixed, Mandatory, Virtual attributes ? + if element.getFixed() is True or 1: + en_fixed = True + if element.getMandatory() is True or 1: + en_mandatory = True + if element.getVirtual() is True or element.getVirtual(): + en_virtual = True + data += str(int(en_fixed)) + str(int(en_mandatory)) + str(int(en_virtual)) + "0" + + for entry in element.getEntry(): + # Entry Index + data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[2:4] + data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[0:2] + # Subindex + data += "{:0>2x}".format(int(entry.getSubIndex())) + # Entry Name Index + objname = "" + for name in entry.getName(): + objname = name.getcontent() + for name in self.Strings: + count += 1 + if objname == name: + break + if len(self.Strings)+1 == count: + data += "00" + else: + data += "{:0>2x}".format(count) + count = 0 + # DataType + if entry.getDataType() is not None: + if entry.getDataType().getcontent() in self.BaseDataTypeDict: + data += self.BaseDataTypeDict[entry.getDataType().getcontent()] + else: + data += "00" + else: + data += "00" + # BitLen + if entry.getBitLen() is not None: + data += "{:0>2x}".format(int(entry.getBitLen())) + else: + data += "00" + # Flags; by Fixed attributes ? + en_fixed = False + if entry.getFixed() is True or entry.getFixed() == 1: + en_fixed = True + data += str(int(en_fixed)) + "000" + + if data != "": + # category header + if pdotype == "TxPdo": + eeprom.append("32") + elif pdotype == "RxPdo": + eeprom.append("33") + else: + eeprom.append("00") + eeprom.append("00") + # category length + eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) + eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) + data = str(data.lower()) + for dummy in range(len(data)/2): + if data == "": + eeprom.append("00") + else: + eeprom.append(data[0:2]) + data = data[2:len(data)] + + return eeprom + + def ExtractEEPROMDCCategory(self, device): + """ + Extract "DC(Distributed Clock)" category data from slave ESI XML and generate EEPROM image data. + @param device : 'device' object in the slave ESI XML + @return eeprom : "Strings" category EEPROM image data + """ + eeprom = [] + data = "" + count = 0 + namecount = 0 + + if device.getDc() is not None: + for element in device.getDc().getOpMode(): + count += 1 + # assume that word 1-7 are 0x0000 + data += "0000" + data += "0000" + data += "0000" + data += "0000" + data += "0000" + data += "0000" + data += "0000" + # word 8-10 + # AssignActivate + if element.getAssignActivate() is not None: + data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[2:4] + data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[0:2] + else: + data += "0000" + # Factor of CycleTimeSync0 ? and default is 1? + if element.getCycleTimeSync0() is not None: + if element.getCycleTimeSync0().getFactor() is not None: + data += "{:0>2x}".format(int(element.getCycleTimeSync0().getFactor())) + data += "00" + else: + data += "0100" + else: + data += "0100" + # Index of Name in STRINGS Category + # Name Index + objname = "" + for name in element.getName(): + objname += name + for name in self.Strings: + namecount += 1 + if objname == name: + break + if len(self.Strings)+1 == namecount: + data += "00" + else: + data += "{:0>2x}".format(namecount) + namecount = 0 + data += "00" + # assume that word 11-12 are 0x0000 + data += "0000" + data += "0000" + + if data != "": + # category header + eeprom.append("3c") + eeprom.append("00") + # category length + eeprom.append("{:0>4x}".format(len(data)/4)[2:4]) + eeprom.append("{:0>4x}".format(len(data)/4)[0:2]) + data = str(data.lower()) + for dummy in range(len(data)/2): + if data == "": + eeprom.append("00") + else: + eeprom.append(data[0:2]) + data = data[2:len(data)] + + return eeprom + + # ------------------------------------------------------------------------------- + # Used Register Access + # ------------------------------------------------------------------------------- + def RegRead(self, offset, length): + """ + Read slave ESC register content using "ethercat reg_read -p %d %s %s" command. + Command example : "ethercat reg_read -p 0 0x0c00 0x0400" + @param offset : register address + @param length : register length + @return return_val : register data + """ + _error, return_val = self.Controler.RemoteExec( + REG_READ % (self.Controler.GetSlavePos(), offset, length), + return_val=None) + return return_val + + def RegWrite(self, address, data): + """ + Write data to slave ESC register using "ethercat reg_write -p %d %s %s" command. + Command example : "ethercat reg_write -p 0 0x0c04 0x0001" + @param address : register address + @param data : data to write + @return return_val : the execution result of "ethercat reg_write" (for error check) + """ + _error, return_val = self.Controler.RemoteExec( + REG_WRITE % (self.Controler.GetSlavePos(), address, data), + return_val=None) + return return_val + + def Rescan(self): + """ + Synchronize EEPROM data in master controller with the data in slave device after EEPROM write. + Command example : "ethercat rescan -p 0" + """ + _error, _return_val = self.Controler.RemoteExec(RESCAN % (self.Controler.GetSlavePos()), return_val=None) + + # ------------------------------------------------------------------------------- + # Common Use Methods + # ------------------------------------------------------------------------------- + def CheckConnect(self, cyclic_flag): + """ + Check connection status (1) between Beremiz and the master (2) between the master and the slave. + @param cyclic_flag: 0 - one shot, 1 - periodic + @return True or False + """ + if self.Controler.GetCTRoot()._connector is not None: + # Check connection between the master and the slave. + # Command example : "ethercat xml -p 0" + _error, return_val = self.Controler.RemoteExec(SLAVE_XML % (self.Controler.GetSlavePos()), return_val=None) + number_of_lines = return_val.split("\n") + if len(number_of_lines) <= 2: # No slave connected to the master controller + if not cyclic_flag: + self.CreateErrorDialog(_('No connected slaves')) + return False + + elif len(number_of_lines) > 2: + return True + else: + # The master controller is not connected to Beremiz host + if not cyclic_flag: + self.CreateErrorDialog(_('PLC not connected!')) + return False + + def CreateErrorDialog(self, mention): + """ + Create a dialog to indicate error or warning. + @param mention : Error String + """ + app_frame = self.Controler.GetCTRoot().AppFrame + dlg = wx.MessageDialog(app_frame, mention, + _(' Warning...'), + wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() diff -r e0f16317668e -r 15f18dc8b56a etherlab/ConfigEditor.py --- a/etherlab/ConfigEditor.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/ConfigEditor.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,6 +9,7 @@ # # See COPYING file for copyrights details. +from __future__ import absolute_import import os import re from types import TupleType @@ -20,40 +21,46 @@ from plcopen.structures import IEC_KEYWORDS, TestIdentifier from controls import CustomGrid, CustomTable, FolderTree +from controls.CustomStyledTextCtrl import NAVIGATION_KEYS from editors.ConfTreeNodeEditor import ConfTreeNodeEditor, SCROLLBAR_UNIT from util.BitmapLibrary import GetBitmap -from controls.CustomStyledTextCtrl import NAVIGATION_KEYS +from util.TranslationCatalogs import NoTranslate # ----------------------------------------------------------------------- -from EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass -# ----------------------------------------------------------------------- - +from etherlab.EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass +# ----------------------------------------------------------------------- + [ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3) + def AppendMenu(parent, help, id, kind, text): if wx.VERSION >= (2, 6, 0): parent.Append(help=help, id=id, kind=kind, text=text) else: parent.Append(helpString=help, id=id, kind=kind, item=text) + def GetVariablesTableColnames(position=False): - _ = lambda x : x + _ = NoTranslate colname = ["#"] if position: colname.append(_("Position")) return colname + [_("Name"), _("Index"), _("SubIndex"), _("Type"), _("Access")] + ACCESS_TYPES = { 'ro': 'R', 'wo': 'W', 'rw': 'R/W'} + def GetAccessValue(access, pdo_mapping): value = "SDO: %s" % ACCESS_TYPES.get(access, "") if pdo_mapping != "": value += ", PDO: %s" % pdo_mapping return value + VARIABLES_FILTERS = [ (_("All"), (0x0000, 0xffff)), (_("Communication Parameters"), (0x1000, 0x1fff)), @@ -66,71 +73,72 @@ ETHERCAT_SUBINDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,2})$") LOCATION_MODEL = re.compile("(?:%[IQM](?:[XBWLD]?([0-9]+(?:\.[0-9]+)*)))$") + class NodeVariablesSizer(wx.FlexGridSizer): - + def __init__(self, parent, controler, position_column=False): wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=2, vgap=5) self.AddGrowableCol(0) self.AddGrowableRow(1) - + self.Controler = controler self.PositionColumn = position_column - + self.VariablesFilter = wx.ComboBox(parent, style=wx.TE_PROCESS_ENTER) self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged) self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged) self.VariablesFilter.Bind(wx.EVT_CHAR, self.OnVariablesFilterKeyDown) self.AddWindow(self.VariablesFilter, flag=wx.GROW) - - self.VariablesGrid = wx.gizmos.TreeListCtrl(parent, - style=wx.TR_DEFAULT_STYLE | - wx.TR_ROW_LINES | - wx.TR_COLUMN_LINES | - wx.TR_HIDE_ROOT | - wx.TR_FULL_ROW_HIGHLIGHT) + + self.VariablesGrid = wx.gizmos.TreeListCtrl(parent, + style=wx.TR_DEFAULT_STYLE | + wx.TR_ROW_LINES | + wx.TR_COLUMN_LINES | + wx.TR_HIDE_ROOT | + wx.TR_FULL_ROW_HIGHLIGHT) self.VariablesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN, - self.OnVariablesGridLeftClick) + self.OnVariablesGridLeftClick) self.AddWindow(self.VariablesGrid, flag=wx.GROW) - + self.Filters = [] for desc, value in VARIABLES_FILTERS: self.VariablesFilter.Append(desc) self.Filters.append(value) - + self.VariablesFilter.SetSelection(0) self.CurrentFilter = self.Filters[0] self.VariablesFilterFirstCharacter = True - + if position_column: for colname, colsize, colalign in zip(GetVariablesTableColnames(position_column), [40, 80, 350, 80, 100, 80, 150], - [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, - wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, + [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, + wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]): self.VariablesGrid.AddColumn(_(colname), colsize, colalign) self.VariablesGrid.SetMainColumn(2) else: for colname, colsize, colalign in zip(GetVariablesTableColnames(), [40, 350, 80, 100, 80, 150], - [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, + [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]): self.VariablesGrid.AddColumn(_(colname), colsize, colalign) self.VariablesGrid.SetMainColumn(1) - + def RefreshView(self): entries = self.Controler.GetSlaveVariables(self.CurrentFilter) self.RefreshVariablesGrid(entries) - + def RefreshVariablesGrid(self, entries): root = self.VariablesGrid.GetRootItem() if not root.IsOk(): root = self.VariablesGrid.AddRoot(_("Slave entries")) self.GenerateVariablesGridBranch(root, entries, GetVariablesTableColnames(self.PositionColumn)) self.VariablesGrid.Expand(root) - + def GenerateVariablesGridBranch(self, root, entries, colnames, idx=0): item, root_cookie = self.VariablesGrid.GetFirstChild(root) - + no_more_items = not item.IsOk() for entry in entries: idx += 1 @@ -153,7 +161,7 @@ if not no_more_items: item, root_cookie = self.VariablesGrid.GetNextChild(root, root_cookie) no_more_items = not item.IsOk() - + if not no_more_items: to_delete = [] while item.IsOk(): @@ -161,9 +169,9 @@ item, root_cookie = self.VariablesGrid.GetNextChild(root, root_cookie) for item in to_delete: self.VariablesGrid.Delete(item) - + return idx - + def OnVariablesFilterChanged(self, event): filter = self.VariablesFilter.GetSelection() if filter != -1: @@ -183,36 +191,36 @@ self.CurrentFilter = (index, index) self.VariablesFilter.SetValue(VARIABLE_INDEX_FILTER_FORMAT % index) self.RefreshView() - except: + except Exception: if self.CurrentFilter in self.Filters: self.VariablesFilter.SetSelection(self.Filters.index(self.CurrentFilter)) else: self.VariablesFilter.SetValue(VARIABLE_INDEX_FILTER_FORMAT % self.CurrentFilter[0]) self.VariablesFilterFirstCharacter = True event.Skip() - + def OnVariablesFilterKeyDown(self, event): if self.VariablesFilterFirstCharacter: keycode = event.GetKeyCode() - if keycode not in [wx.WXK_RETURN, + if keycode not in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]: self.VariablesFilterFirstCharacter = False if keycode not in NAVIGATION_KEYS: self.VariablesFilter.SetValue("") - if keycode not in [wx.WXK_DELETE, - wx.WXK_NUMPAD_DELETE, + if keycode not in [wx.WXK_DELETE, + wx.WXK_NUMPAD_DELETE, wx.WXK_BACK]: event.Skip() else: event.Skip() - + def OnVariablesGridLeftClick(self, event): - item, flags, col = self.VariablesGrid.HitTest(event.GetPosition()) + item, _flags, col = self.VariablesGrid.HitTest(event.GetPosition()) if item.IsOk(): entry = self.VariablesGrid.GetItemPyData(item) data_type = entry.get("Type", "") data_size = self.Controler.GetSizeOfType(data_type) - + if col == -1 and data_size is not None: pdo_mapping = entry.get("PDOMapping", "") access = entry.get("Access", "") @@ -225,7 +233,7 @@ node_name = self.Controler.GetSlaveName(slave_pos) else: node_name = self.Controler.CTNName() - + if pdo_mapping != "": var_name = "%s_%4.4x_%2.2x" % (node_name, entry_index, entry_subindex) if pdo_mapping == "T": @@ -233,14 +241,14 @@ else: dir = "%Q" location = "%s%s" % (dir, data_size) + \ - ".".join(map(lambda x:str(x), location + (entry_index, entry_subindex))) - + ".".join(map(str, location + (entry_index, entry_subindex))) + data = wx.TextDataObject(str((location, "location", data_type, var_name, "", access))) dragSource = wx.DropSource(self.VariablesGrid) dragSource.SetData(data) dragSource.DoDragDrop() return - + elif self.PositionColumn: location = self.Controler.GetCurrentLocation() +\ (slave_pos, entry_index, entry_subindex) @@ -249,67 +257,68 @@ dragSource.SetData(data) dragSource.DoDragDrop() return - + event.Skip() + class NodeEditor(ConfTreeNodeEditor): - + CONFNODEEDITOR_TABS = [ (_("Ethercat node"), "_create_EthercatNodeEditor"), # Add Notebook Tab for EtherCAT Management Treebook (_("EtherCAT Management"), "_create_EtherCATManagementEditor") ] - + def _create_EthercatNodeEditor(self, prnt): self.EthercatNodeEditor = wx.Panel(prnt, style=wx.TAB_TRAVERSAL) - + main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) main_sizer.AddGrowableCol(0) main_sizer.AddGrowableRow(1) - + variables_label = wx.StaticText(self.EthercatNodeEditor, - label=_('Variable entries:')) - main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP|wx.LEFT|wx.RIGHT) - + label=_('Variable entries:')) + main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP | wx.LEFT | wx.RIGHT) + self.NodeVariables = NodeVariablesSizer(self.EthercatNodeEditor, self.Controler) - main_sizer.AddSizer(self.NodeVariables, border=10, - flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) - + main_sizer.AddSizer(self.NodeVariables, border=10, + flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT) + self.EthercatNodeEditor.SetSizer(main_sizer) return self.EthercatNodeEditor - + def __init__(self, parent, controler, window): ConfTreeNodeEditor.__init__(self, parent, controler, window) - + # add Contoler for use EthercatSlave.py Method self.Controler = controler - + def GetBufferState(self): return False, False - + def RefreshView(self): ConfTreeNodeEditor.RefreshView(self) - + self.NodeVariables.RefreshView() - # -------------------For EtherCAT Management ---------------------------------------------- + # -------------------For EtherCAT Management ---------------------------------------------- def _create_EtherCATManagementEditor(self, prnt): self.EtherCATManagementEditor = wx.ScrolledWindow(prnt, - style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL) self.EtherCATManagementEditor.Bind(wx.EVT_SIZE, self.OnResize) self.EtherCATManagermentEditor_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) self.EtherCATManagermentEditor_Main_Sizer.AddGrowableCol(0) self.EtherCATManagermentEditor_Main_Sizer.AddGrowableRow(0) - + self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self) - + self.EtherCATManagermentEditor_Main_Sizer.AddSizer(self.EtherCATManagementTreebook, border=10, flag=wx.GROW) self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer) return self.EtherCATManagementEditor - + def OnResize(self, event): self.EtherCATManagementEditor.GetBestSize() xstart, ystart = self.EtherCATManagementEditor.GetViewStart() @@ -318,23 +327,27 @@ posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) self.EtherCATManagementEditor.Scroll(posx, posy) - self.EtherCATManagementEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, - maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) + self.EtherCATManagementEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, + maxx / SCROLLBAR_UNIT, + maxy / SCROLLBAR_UNIT, + posx, posy) event.Skip() # ------------------------------------------------------------------------------------------------------- + CIA402NodeEditor = NodeEditor def GetProcessVariablesTableColnames(): - _ = lambda x : x - return ["#", _("Name"), - _("Read from (nodeid, index, subindex)"), + _ = NoTranslate + return ["#", _("Name"), + _("Read from (nodeid, index, subindex)"), _("Write to (nodeid, index, subindex)"), _("Description")] + class ProcessVariablesTable(CustomTable): - + def GetValue(self, row, col): if row < self.GetNumberRows(): if col == 0: @@ -351,7 +364,7 @@ return value return "%d, #x%0.4X, #x%0.2X" % value return self.data[row].get(colname, "") - + def SetValue(self, row, col, value): if col < len(self.colnames): colname = self.GetColLabelValue(col, False) @@ -361,7 +374,7 @@ self.data[row]["WriteTo"] = value else: self.data[row][colname] = value - + def _updateColAttrs(self, grid): """ wx.grid.Grid -> update the column attributes to add the @@ -380,18 +393,19 @@ grid.SetReadOnly(row, col, False) else: grid.SetReadOnly(row, col, True) - + grid.SetCellEditor(row, col, editor) grid.SetCellRenderer(row, col, renderer) - + self.ResizeRow(grid, row) + class ProcessVariableDropTarget(wx.TextDropTarget): - + def __init__(self, parent): wx.TextDropTarget.__init__(self) self.ParentWindow = parent - + def OnDropText(self, x, y, data): self.ParentWindow.Select() x, y = self.ParentWindow.ProcessVariablesGrid.CalcUnscrolledPosition(x, y) @@ -400,11 +414,11 @@ message = None try: values = eval(data) - except: - message = _("Invalid value \"%s\" for process variable")%data + except Exception: + message = _("Invalid value \"%s\" for process variable") % data values = None if not isinstance(values, TupleType): - message = _("Invalid value \"%s\" for process variable")%data + message = _("Invalid value \"%s\" for process variable") % data values = None if values is not None and col != wx.NOT_FOUND and row != wx.NOT_FOUND and 2 <= col <= 3: location = None @@ -413,8 +427,8 @@ if result is not None: location = map(int, result.group(1).split('.')) master_location = self.ParentWindow.GetMasterLocation() - if (master_location == tuple(location[:len(master_location)]) and - len(location) - len(master_location) == 3): + if master_location == tuple(location[:len(master_location)]) and \ + len(location) - len(master_location) == 3: values = tuple(location[len(master_location):]) var_type = self.ParentWindow.Controler.GetSlaveVariableDataType(*values) if col == 2: @@ -435,36 +449,38 @@ else: message = _("'Read from' and 'Write to' variables types are not compatible") else: - message = _("Invalid value \"%s\" for process variable")%data - + message = _("Invalid value \"%s\" for process variable") % data + if message is not None: wx.CallAfter(self.ShowMessage, message) - + def ShowMessage(self, message): - message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) + message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR) message.ShowModal() message.Destroy() + def GetStartupCommandsTableColnames(): - _ = lambda x : x + _ = NoTranslate return [_("Position"), _("Index"), _("Subindex"), _("Value"), _("Description")] + class StartupCommandDropTarget(wx.TextDropTarget): - + def __init__(self, parent): wx.TextDropTarget.__init__(self) self.ParentWindow = parent - + def OnDropText(self, x, y, data): self.ParentWindow.Select() message = None try: values = eval(data) - except: - message = _("Invalid value \"%s\" for startup command")%data + except Exception: + message = _("Invalid value \"%s\" for startup command") % data values = None if not isinstance(values, TupleType): - message = _("Invalid value \"%s\" for startup command")%data + message = _("Invalid value \"%s\" for startup command") % data values = None if values is not None: location = None @@ -478,23 +494,24 @@ access = values[2] if location is not None: master_location = self.ParentWindow.GetMasterLocation() - if (master_location == tuple(location[:len(master_location)]) and - len(location) - len(master_location) == 3): + if master_location == tuple(location[:len(master_location)]) and \ + len(location) - len(master_location) == 3: if access in ["wo", "rw"]: self.ParentWindow.AddStartupCommand(*location[len(master_location):]) else: message = _("Entry can't be write through SDO") else: - message = _("Invalid value \"%s\" for startup command")%data - + message = _("Invalid value \"%s\" for startup command") % data + if message is not None: wx.CallAfter(self.ShowMessage, message) - + def ShowMessage(self, message): - message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) + message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR) message.ShowModal() message.Destroy() + class StartupCommandsTable(CustomTable): """ @@ -514,7 +531,7 @@ elif colname == "Subindex": return "#x%0.2X" % value return value - + def SetValue(self, row, col, value): if col < len(self.colnames): colname = self.GetColLabelValue(col, False) @@ -532,10 +549,10 @@ self.old_value = self.data[row][colname] value = int(value) self.data[row][colname] = value - + def GetOldValue(self): return self.old_value - + def _updateColAttrs(self, grid): """ wx.grid.Grid -> update the column attributes to add the @@ -554,29 +571,30 @@ else: editor = wx.grid.GridCellTextEditor() renderer = wx.grid.GridCellStringRenderer() - + grid.SetCellEditor(row, col, editor) grid.SetCellRenderer(row, col, renderer) grid.SetReadOnly(row, col, False) - + self.ResizeRow(grid, row) - + def GetCommandIndex(self, position, command_idx): for row, command in enumerate(self.data): if command["Position"] == position and command["command_idx"] == command_idx: return row return None + class MasterNodesVariablesSizer(NodeVariablesSizer): - + def __init__(self, parent, controler): NodeVariablesSizer.__init__(self, parent, controler, True) - + self.CurrentNodesFilter = {} - + def SetCurrentNodesFilter(self, nodes_filter): self.CurrentNodesFilter = nodes_filter - + def RefreshView(self): if self.CurrentNodesFilter is not None: args = self.CurrentNodesFilter.copy() @@ -584,174 +602,164 @@ entries = self.Controler.GetNodesVariables(**args) self.RefreshVariablesGrid(entries) + NODE_POSITION_FILTER_FORMAT = _("Node Position: %d") + class MasterEditor(ConfTreeNodeEditor): - + CONFNODEEDITOR_TABS = [ (_("Network"), "_create_EthercatMasterEditor"), (_("Master State"), "_create_MasterStateEditor") ] - + def _create_MasterStateEditor(self, prnt): - self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL) self.MasterStateEditor.Bind(wx.EVT_SIZE, self.OnResize) - + self.MasterStateEditor_Panel_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) self.MasterStateEditor_Panel_Main_Sizer.AddGrowableCol(0) self.MasterStateEditor_Panel_Main_Sizer.AddGrowableRow(0) - + self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler) - + self.MasterStateEditor_Panel_Main_Sizer.AddSizer(self.MasterStateEditor_Panel, border=10, flag=wx.GROW) - + self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer) return self.MasterStateEditor - - def OnResize(self, event): - self.MasterStateEditor.GetBestSize() - xstart, ystart = self.MasterStateEditor.GetViewStart() - window_size = self.MasterStateEditor.GetClientSize() - maxx, maxy = self.MasterStateEditor.GetMinSize() - posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) - posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) - self.MasterStateEditor.Scroll(posx, posy) - self.MasterStateEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, - maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) - event.Skip() - + def _create_EthercatMasterEditor(self, prnt): - self.EthercatMasterEditor = wx.ScrolledWindow(prnt, - style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + self.EthercatMasterEditor = wx.ScrolledWindow(prnt, + style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL) self.EthercatMasterEditor.Bind(wx.EVT_SIZE, self.OnResize) - + self.EthercatMasterEditorSizer = wx.BoxSizer(wx.VERTICAL) - + self.NodesFilter = wx.ComboBox(self.EthercatMasterEditor, - style=wx.TE_PROCESS_ENTER) + style=wx.TE_PROCESS_ENTER) self.Bind(wx.EVT_COMBOBOX, self.OnNodesFilterChanged, self.NodesFilter) self.Bind(wx.EVT_TEXT_ENTER, self.OnNodesFilterChanged, self.NodesFilter) self.NodesFilter.Bind(wx.EVT_CHAR, self.OnNodesFilterKeyDown) - + process_variables_header = wx.BoxSizer(wx.HORIZONTAL) - + process_variables_label = wx.StaticText(self.EthercatMasterEditor, - label=_("Process variables mapped between nodes:")) + label=_("Process variables mapped between nodes:")) process_variables_header.AddWindow(process_variables_label, 1, - flag=wx.ALIGN_CENTER_VERTICAL) - + flag=wx.ALIGN_CENTER_VERTICAL) + for name, bitmap, help in [ ("AddVariableButton", "add_element", _("Add process variable")), ("DeleteVariableButton", "remove_element", _("Remove process variable")), ("UpVariableButton", "up", _("Move process variable up")), ("DownVariableButton", "down", _("Move process variable down"))]: - button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap), - size=wx.Size(28, 28), style=wx.NO_BORDER) + button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap), + size=wx.Size(28, 28), style=wx.NO_BORDER) button.SetToolTipString(help) setattr(self, name, button) process_variables_header.AddWindow(button, border=5, flag=wx.LEFT) - + self.ProcessVariablesGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL) self.ProcessVariablesGrid.SetMinSize(wx.Size(0, 150)) self.ProcessVariablesGrid.SetDropTarget(ProcessVariableDropTarget(self)) - self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, - self.OnProcessVariablesGridCellChange) - self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, - self.OnProcessVariablesGridCellLeftClick) + self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, + self.OnProcessVariablesGridCellChange) + self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, + self.OnProcessVariablesGridCellLeftClick) self.ProcessVariablesGrid.Bind(wx.EVT_KEY_DOWN, self.OnProcessVariablesGridKeyDown) - + startup_commands_header = wx.BoxSizer(wx.HORIZONTAL) - + startup_commands_label = wx.StaticText(self.EthercatMasterEditor, - label=_("Startup service variables assignments:")) + label=_("Startup service variables assignments:")) startup_commands_header.AddWindow(startup_commands_label, 1, - flag=wx.ALIGN_CENTER_VERTICAL) - + flag=wx.ALIGN_CENTER_VERTICAL) + for name, bitmap, help in [ ("AddCommandButton", "add_element", _("Add startup service variable")), ("DeleteCommandButton", "remove_element", _("Remove startup service variable"))]: - button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap), - size=wx.Size(28, 28), style=wx.NO_BORDER) + button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap), + size=wx.Size(28, 28), style=wx.NO_BORDER) button.SetToolTipString(help) setattr(self, name, button) startup_commands_header.AddWindow(button, border=5, flag=wx.LEFT) - + self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL) self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self)) self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150)) - self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, - self.OnStartupCommandsGridCellChange) - self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, - self.OnStartupCommandsGridEditorShow) - + self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, + self.OnStartupCommandsGridCellChange) + self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, + self.OnStartupCommandsGridEditorShow) + self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler) - + main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:")) staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL) - self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW|wx.ALL) - + self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL) + main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0) main_staticbox_sizer.AddGrowableCol(0) main_staticbox_sizer.AddGrowableRow(2) main_staticbox_sizer.AddGrowableRow(4) main_staticbox_sizer.AddGrowableRow(5) staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW) - main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW|wx.ALL) - main_staticbox_sizer.AddSizer(process_variables_header, border=5, - flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) - main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1, - border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) - main_staticbox_sizer.AddSizer(startup_commands_header, - border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) - main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1, - border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) - + main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL) + main_staticbox_sizer.AddSizer(process_variables_header, border=5, + flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) + main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1, + border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) + main_staticbox_sizer.AddSizer(startup_commands_header, + border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) + main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1, + border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) + second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:")) second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL) - second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW|wx.ALL) - - main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1, - border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) - + second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL) + + main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1, + border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) + self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer) - + return self.EthercatMasterEditor def __init__(self, parent, controler, window): ConfTreeNodeEditor.__init__(self, parent, controler, window) - + # ------------------------------------------------------------------ self.Controler = controler # ------------------------------------------------------------------ - + self.ProcessVariables = [] self.CellShown = None self.NodesFilterFirstCharacter = True - + self.ProcessVariablesDefaultValue = {"Name": "", "ReadFrom": "", "WriteTo": "", "Description": ""} self.ProcessVariablesTable = ProcessVariablesTable(self, [], GetProcessVariablesTableColnames()) self.ProcessVariablesColSizes = [40, 100, 150, 150, 200] self.ProcessVariablesColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] - + self.ProcessVariablesGrid.SetTable(self.ProcessVariablesTable) self.ProcessVariablesGrid.SetButtons({"Add": self.AddVariableButton, "Delete": self.DeleteVariableButton, "Up": self.UpVariableButton, "Down": self.DownVariableButton}) - + def _AddVariablesElement(new_row): self.ProcessVariablesTable.InsertRow(new_row, self.ProcessVariablesDefaultValue.copy()) self.SaveProcessVariables() self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid) return new_row setattr(self.ProcessVariablesGrid, "_AddRow", _AddVariablesElement) - + def _DeleteVariablesElement(row): self.ProcessVariablesTable.RemoveRow(row) self.SaveProcessVariables() self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid) setattr(self.ProcessVariablesGrid, "_DeleteRow", _DeleteVariablesElement) - + def _MoveVariablesElement(row, move): new_row = self.ProcessVariablesTable.MoveRow(row, move) if new_row != row: @@ -759,8 +767,9 @@ self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid) return new_row setattr(self.ProcessVariablesGrid, "_MoveRow", _MoveVariablesElement) - + _refresh_buttons = getattr(self.ProcessVariablesGrid, "RefreshButtons") + def _RefreshButtons(): if self.NodesFilter.GetSelection() == 0: _refresh_buttons() @@ -770,7 +779,7 @@ self.UpVariableButton.Enable(False) self.DownVariableButton.Enable(False) setattr(self.ProcessVariablesGrid, "RefreshButtons", _RefreshButtons) - + self.ProcessVariablesGrid.SetRowLabelSize(0) for col in range(self.ProcessVariablesTable.GetNumberCols()): attr = wx.grid.GridCellAttr() @@ -779,16 +788,16 @@ self.ProcessVariablesGrid.SetColMinimalWidth(col, self.ProcessVariablesColSizes[col]) self.ProcessVariablesGrid.AutoSizeColumn(col, False) self.ProcessVariablesGrid.RefreshButtons() - + self.StartupCommandsDefaultValue = {"Position": 0, "Index": 0, "Subindex": 0, "Value": 0, "Description": ""} self.StartupCommandsTable = StartupCommandsTable(self, [], GetStartupCommandsTableColnames()) self.StartupCommandsColSizes = [100, 100, 50, 100, 200] self.StartupCommandsColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT] - + self.StartupCommandsGrid.SetTable(self.StartupCommandsTable) self.StartupCommandsGrid.SetButtons({"Add": self.AddCommandButton, "Delete": self.DeleteCommandButton}) - + def _AddCommandsElement(new_row): command = self.StartupCommandsDefaultValue.copy() command_idx = self.Controler.AppendStartupCommand(command) @@ -796,14 +805,14 @@ self.RefreshBuffer() return self.StartupCommandsTable.GetCommandIndex(command["Position"], command_idx) setattr(self.StartupCommandsGrid, "_AddRow", _AddCommandsElement) - + def _DeleteCommandsElement(row): command = self.StartupCommandsTable.GetRow(row) self.Controler.RemoveStartupCommand(command["Position"], command["command_idx"]) self.RefreshStartupCommands() self.RefreshBuffer() setattr(self.StartupCommandsGrid, "_DeleteRow", _DeleteCommandsElement) - + self.StartupCommandsGrid.SetRowLabelSize(0) for col in range(self.StartupCommandsTable.GetNumberCols()): attr = wx.grid.GridCellAttr() @@ -812,32 +821,32 @@ self.StartupCommandsGrid.SetColMinimalWidth(col, self.StartupCommandsColSizes[col]) self.StartupCommandsGrid.AutoSizeColumn(col, False) self.StartupCommandsGrid.RefreshButtons() - + def RefreshBuffer(self): self.ParentWindow.RefreshTitle() self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() self.ParentWindow.RefreshPageTitles() - + def GetBufferState(self): return self.Controler.GetBufferState() - + def Undo(self): self.Controler.LoadPrevious() self.RefreshView() - + def Redo(self): self.Controler.LoadNext() self.RefreshView() - + def RefreshView(self): ConfTreeNodeEditor.RefreshView(self) - + self.RefreshNodesFilter() self.RefreshProcessVariables() self.RefreshStartupCommands() self.NodesVariables.RefreshView() - + def RefreshNodesFilter(self): value = self.NodesFilter.GetValue() self.NodesFilter.Clear() @@ -854,10 +863,10 @@ try: int(value) self.NodesFilter.SetValue(value) - except: + except Exception: self.NodesFilter.SetSelection(0) self.RefreshCurrentNodesFilter() - + def RefreshCurrentNodesFilter(self): filter = self.NodesFilter.GetSelection() if filter != -1: @@ -872,27 +881,27 @@ position = int(self.NodesFilter.GetValue()) self.CurrentNodesFilter = {"slave_pos": position} self.NodesFilter.SetValue(NODE_POSITION_FILTER_FORMAT % position) - except: + except Exception: if self.CurrentNodesFilter in self.NodesFilterValues: self.NodesFilter.SetSelection(self.NodesFilterValues.index(self.CurrentNodesFilter)) else: self.NodesFilter.SetValue(NODE_POSITION_FILTER_FORMAT % self.CurrentNodesFilter["slave_pos"]) self.NodesFilterFirstCharacter = True self.NodesVariables.SetCurrentNodesFilter(self.CurrentNodesFilter) - + def RefreshProcessVariables(self): if self.CurrentNodesFilter is not None: self.ProcessVariables = self.Controler.GetProcessVariables() slaves = self.Controler.GetSlaves(**self.CurrentNodesFilter) data = [] for variable in self.ProcessVariables: - if (variable["ReadFrom"] == "" or variable["ReadFrom"][0] in slaves or - variable["WriteTo"] == "" or variable["WriteTo"][0] in slaves): + if variable["ReadFrom"] == "" or variable["ReadFrom"][0] in slaves or \ + variable["WriteTo"] == "" or variable["WriteTo"][0] in slaves: data.append(variable) self.ProcessVariablesTable.SetData(data) self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid) self.ProcessVariablesGrid.RefreshButtons() - + def SaveProcessVariables(self): if self.CurrentNodesFilter is not None: if len(self.CurrentNodesFilter) > 0: @@ -900,7 +909,7 @@ else: self.Controler.SetProcessVariables(self.ProcessVariablesTable.GetData()) self.RefreshBuffer() - + def RefreshStartupCommands(self, position=None, command_idx=None): if self.CurrentNodesFilter is not None: col = max(self.StartupCommandsGrid.GetGridCursorCol(), 0) @@ -909,15 +918,15 @@ self.StartupCommandsTable.ResetView(self.StartupCommandsGrid) if position is not None and command_idx is not None: self.SelectStartupCommand(position, command_idx, col) - + def SelectStartupCommand(self, position, command_idx, col): self.StartupCommandsGrid.SetSelectedCell( self.StartupCommandsTable.GetCommandIndex(position, command_idx), col) - + def GetMasterLocation(self): return self.Controler.GetCurrentLocation() - + def AddStartupCommand(self, position, index, subindex): col = max(self.StartupCommandsGrid.GetGridCursorCol(), 0) command = self.StartupCommandsDefaultValue.copy() @@ -928,7 +937,7 @@ self.RefreshStartupCommands() self.RefreshBuffer() self.SelectStartupCommand(position, command_idx, col) - + def OnNodesFilterChanged(self, event): self.RefreshCurrentNodesFilter() if self.CurrentNodesFilter is not None: @@ -936,22 +945,22 @@ self.RefreshStartupCommands() self.NodesVariables.RefreshView() event.Skip() - + def OnNodesFilterKeyDown(self, event): if self.NodesFilterFirstCharacter: keycode = event.GetKeyCode() - if keycode not in [wx.WXK_RETURN, + if keycode not in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]: self.NodesFilterFirstCharacter = False if keycode not in NAVIGATION_KEYS: self.NodesFilter.SetValue("") - if keycode not in [wx.WXK_DELETE, - wx.WXK_NUMPAD_DELETE, + if keycode not in [wx.WXK_DELETE, + wx.WXK_NUMPAD_DELETE, wx.WXK_BACK]: event.Skip() else: event.Skip() - + def OnProcessVariablesGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() colname = self.ProcessVariablesTable.GetColLabelValue(col, False) @@ -969,11 +978,11 @@ wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid) event.Skip() else: - dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) + dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy() event.Veto() - + def OnProcessVariablesGridCellLeftClick(self, event): row = event.GetRow() if event.GetCol() == 0: @@ -983,31 +992,31 @@ data_size = self.Controler.GetSizeOfType(var_type) number = self.ProcessVariablesTable.GetValueByName(row, "Number") location = "%%M%s" % data_size + \ - ".".join(map(lambda x:str(x), self.Controler.GetCurrentLocation() + (number,))) - + ".".join(map(str, self.Controler.GetCurrentLocation() + (number,))) + data = wx.TextDataObject(str((location, "location", var_type, var_name, ""))) dragSource = wx.DropSource(self.ProcessVariablesGrid) dragSource.SetData(data) dragSource.DoDragDrop() event.Skip() - + def OnProcessVariablesGridKeyDown(self, event): keycode = event.GetKeyCode() col = self.ProcessVariablesGrid.GetGridCursorCol() row = self.ProcessVariablesGrid.GetGridCursorRow() colname = self.ProcessVariablesTable.GetColLabelValue(col, False) - if (keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and - (colname.startswith("Read from") or colname.startswith("Write to"))): + if keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and \ + (colname.startswith("Read from") or colname.startswith("Write to")): self.ProcessVariablesTable.SetValue(row, col, "") self.SaveProcessVariables() wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid) else: event.Skip() - + def OnStartupCommandsGridEditorShow(self, event): self.CellShown = event.GetRow(), event.GetCol() event.Skip() - + def OnStartupCommandsGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() if self.CellShown == (row, col): @@ -1029,19 +1038,19 @@ else: command = self.StartupCommandsTable.GetRow(row) self.Controler.SetStartupCommandInfos(command) - if colname in ["Index", "SubIndex"]: + if colname in ["Index", "SubIndex"]: wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"]) if message is None: self.RefreshBuffer() event.Skip() else: - dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) + dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy() event.Veto() else: event.Veto() - + def OnResize(self, event): self.EthercatMasterEditor.GetBestSize() xstart, ystart = self.EthercatMasterEditor.GetViewStart() @@ -1050,11 +1059,13 @@ posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) self.EthercatMasterEditor.Scroll(posx, posy) - self.EthercatMasterEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, - maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) + self.EthercatMasterEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, + maxx / SCROLLBAR_UNIT, + maxy / SCROLLBAR_UNIT, + posx, posy) event.Skip() - - #def OnButtonClick(self, event): + + # def OnButtonClick(self, event): # self.MasterState = self.Controler.getMasterState() # if self.MasterState: # self.Phase.SetValue(self.MasterState["phase"]) @@ -1067,7 +1078,7 @@ # self.TxByte.SetValue(self.MasterState["TXbyte"]) # self.TxError.SetValue(self.MasterState["TXerror"]) # self.LostFrames.SetValue(self.MasterState["lost"]) - + # self.TxFrameRate1.SetValue(self.MasterState["TXframerate1"]) # self.TxFrameRate2.SetValue(self.MasterState["TXframerate2"]) # self.TxFrameRate3.SetValue(self.MasterState["TXframerate3"]) @@ -1080,42 +1091,44 @@ # self.FrameLoss1.SetValue(self.MasterState["frameloss1"]) # self.FrameLoss2.SetValue(self.MasterState["frameloss2"]) # self.FrameLoss3.SetValue(self.MasterState["frameloss3"]) - + + class LibraryEditorSizer(wx.FlexGridSizer): - + def __init__(self, parent, module_library, buttons): wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5) - + self.ModuleLibrary = module_library self.ParentWindow = parent - + self.AddGrowableCol(0) self.AddGrowableRow(1) self.AddGrowableRow(3) - - ESI_files_label = wx.StaticText(parent, - label=_("ESI Files:")) - self.AddWindow(ESI_files_label, border=10, - flag=wx.TOP|wx.LEFT|wx.RIGHT) - + + ESI_files_label = wx.StaticText(parent, + label=_("ESI Files:")) + self.AddWindow(ESI_files_label, border=10, + flag=wx.TOP | wx.LEFT | wx.RIGHT) + folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0) folder_tree_sizer.AddGrowableCol(0) folder_tree_sizer.AddGrowableRow(0) - self.AddSizer(folder_tree_sizer, border=10, - flag=wx.GROW|wx.LEFT|wx.RIGHT) - + self.AddSizer(folder_tree_sizer, border=10, + flag=wx.GROW | wx.LEFT | wx.RIGHT) + self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False) self.ESIFiles.SetFilter(".xml") folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW) - + buttons_sizer = wx.BoxSizer(wx.VERTICAL) - folder_tree_sizer.AddSizer(buttons_sizer, - flag=wx.ALIGN_CENTER_VERTICAL) - + folder_tree_sizer.AddSizer(buttons_sizer, + flag=wx.ALIGN_CENTER_VERTICAL) + for idx, (name, bitmap, help, callback) in enumerate(buttons): - button = wx.lib.buttons.GenBitmapButton(parent, - bitmap=GetBitmap(bitmap), - size=wx.Size(28, 28), style=wx.NO_BORDER) + button = wx.lib.buttons.GenBitmapButton(parent, + bitmap=GetBitmap(bitmap), + size=wx.Size(28, 28), + style=wx.NO_BORDER) button.SetToolTipString(help) setattr(self, name, button) if idx > 0: @@ -1127,78 +1140,78 @@ if callback is not None: parent.Bind(wx.EVT_BUTTON, callback, button) buttons_sizer.AddWindow(button, border=10, flag=flag) - - modules_label = wx.StaticText(parent, - label=_("Modules library:")) - self.AddSizer(modules_label, border=10, - flag=wx.LEFT|wx.RIGHT) - + + modules_label = wx.StaticText(parent, + label=_("Modules library:")) + self.AddSizer(modules_label, border=10, + flag=wx.LEFT | wx.RIGHT) + self.ModulesGrid = wx.gizmos.TreeListCtrl(parent, - style=wx.TR_DEFAULT_STYLE | - wx.TR_ROW_LINES | - wx.TR_COLUMN_LINES | - wx.TR_HIDE_ROOT | - wx.TR_FULL_ROW_HIGHLIGHT) + style=wx.TR_DEFAULT_STYLE | + wx.TR_ROW_LINES | + wx.TR_COLUMN_LINES | + wx.TR_HIDE_ROOT | + wx.TR_FULL_ROW_HIGHLIGHT) self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN, - self.OnModulesGridLeftDown) + self.OnModulesGridLeftDown) self.ModulesGrid.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, - self.OnModulesGridBeginLabelEdit) + self.OnModulesGridBeginLabelEdit) self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT, - self.OnModulesGridEndLabelEdit) - self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION, - self.OnModulesGridHeaderMotion) - self.AddWindow(self.ModulesGrid, border=10, - flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) - + self.OnModulesGridEndLabelEdit) + self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION, + self.OnModulesGridHeaderMotion) + self.AddWindow(self.ModulesGrid, border=10, + flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT) + for colname, colsize, colalign in zip( - [_("Name")] + [param_infos["column_label"] - for param, param_infos in + [_("Name")] + [param_infos["column_label"] + for _param, param_infos in self.ModuleLibrary.MODULES_EXTRA_PARAMS], - [400] + [param_infos["column_size"] - for param, param_infos in + [400] + [param_infos["column_size"] + for _param, param_infos in self.ModuleLibrary.MODULES_EXTRA_PARAMS], [wx.ALIGN_LEFT] + [wx.ALIGN_RIGHT] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS)): self.ModulesGrid.AddColumn(_(colname), colsize, colalign, edit=True) self.ModulesGrid.SetMainColumn(0) - + self.CurrentSelectedCol = None self.LastToolTipCol = None - + def GetPath(self): return self.ModuleLibrary.GetPath() - + def SetControlMinSize(self, size): self.ESIFiles.SetMinSize(size) self.ModulesGrid.SetMinSize(size) - + def GetSelectedFilePath(self): return self.ESIFiles.GetPath() - + def RefreshView(self): self.ESIFiles.RefreshTree() self.RefreshModulesGrid() - + def RefreshModulesGrid(self): root = self.ModulesGrid.GetRootItem() if not root.IsOk(): root = self.ModulesGrid.AddRoot("Modules") - self.GenerateModulesGridBranch(root, - self.ModuleLibrary.GetModulesLibrary(), - GetVariablesTableColnames()) + self.GenerateModulesGridBranch(root, + self.ModuleLibrary.GetModulesLibrary(), + GetVariablesTableColnames()) self.ModulesGrid.Expand(root) - + def GenerateModulesGridBranch(self, root, modules, colnames): item, root_cookie = self.ModulesGrid.GetFirstChild(root) - + no_more_items = not item.IsOk() for module in modules: if no_more_items: item = self.ModulesGrid.AppendItem(root, "") self.ModulesGrid.SetItemText(item, module["name"], 0) if module["infos"] is not None: - for param_idx, (param, param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS): - self.ModulesGrid.SetItemText(item, - str(module["infos"][param]), + for param_idx, (param, _param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS): + self.ModulesGrid.SetItemText(item, + str(module["infos"][param]), param_idx + 1) else: self.ModulesGrid.SetItemBackgroundColour(item, wx.LIGHT_GREY) @@ -1207,7 +1220,7 @@ if not no_more_items: item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie) no_more_items = not item.IsOk() - + if not no_more_items: to_delete = [] while item.IsOk(): @@ -1215,46 +1228,49 @@ item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie) for item in to_delete: self.ModulesGrid.Delete(item) - + def OnImportButton(self, event): dialog = wx.FileDialog(self.ParentWindow, - _("Choose an XML file"), - os.getcwd(), "", - _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN) - + _("Choose an XML file"), + os.getcwd(), "", + _("XML files (*.xml)|*.xml|All files|*.*"), + wx.OPEN) + if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() if self.ModuleLibrary.ImportModuleLibrary(filepath): wx.CallAfter(self.RefreshView) else: - message = wx.MessageDialog(self, - _("No such XML file: %s\n") % filepath, - _("Error"), wx.OK|wx.ICON_ERROR) + message = wx.MessageDialog(self, + _("No such XML file: %s\n") % filepath, + _("Error"), + wx.OK | wx.ICON_ERROR) message.ShowModal() message.Destroy() dialog.Destroy() - + event.Skip() - + def OnDeleteButton(self, event): filepath = self.GetSelectedFilePath() if os.path.isfile(filepath): - folder, filename = os.path.split(filepath) - - dialog = wx.MessageDialog(self.ParentWindow, - _("Do you really want to delete the file '%s'?") % filename, - _("Delete File"), wx.YES_NO|wx.ICON_QUESTION) + _folder, filename = os.path.split(filepath) + + dialog = wx.MessageDialog(self.ParentWindow, + _("Do you really want to delete the file '%s'?") % filename, + _("Delete File"), + wx.YES_NO | wx.ICON_QUESTION) remove = dialog.ShowModal() == wx.ID_YES dialog.Destroy() - + if remove: os.remove(filepath) self.ModuleLibrary.LoadModules() wx.CallAfter(self.RefreshView) event.Skip() - + def OnModulesGridLeftDown(self, event): - item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) + item, _flags, col = self.ModulesGrid.HitTest(event.GetPosition()) if item.IsOk(): entry_infos = self.ModulesGrid.GetItemPyData(item) if entry_infos is not None and col > 0: @@ -1293,9 +1309,10 @@ wx.CallAfter(self.RefreshModulesGrid) event.Skip() except ValueError: - message = wx.MessageDialog(self, - _("Module %s must be an integer!") % stripped_column_label, - _("Error"), wx.OK|wx.ICON_ERROR) + message = wx.MessageDialog(self, + _("Module %s must be an integer!") % stripped_column_label, + _("Error"), + wx.OK | wx.ICON_ERROR) message.ShowModal() message.Destroy() event.Veto() @@ -1303,91 +1320,100 @@ event.Veto() else: event.Veto() - + def OnModulesGridHeaderMotion(self, event): - item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) + _item, _flags, col = self.ModulesGrid.HitTest(event.GetPosition()) if col != self.LastToolTipCol and self.LastToolTipCol is not None: self.ModulesGrid.GetHeaderWindow().SetToolTip(None) self.LastToolTipCol = None if col > 0 and self.LastToolTipCol != col: self.LastToolTipCol = col - param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] - wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString, + _param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] + wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString, param_infos["description"]) event.Skip() + class DatabaseManagementDialog(wx.Dialog): - + def __init__(self, parent, database): wx.Dialog.__init__(self, parent, - size=wx.Size(700, 500), title=_('ESI Files Database management'), - style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) - + size=wx.Size(700, 500), + title=_('ESI Files Database management'), + style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) + main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) main_sizer.AddGrowableCol(0) main_sizer.AddGrowableRow(0) - - self.DatabaseSizer = LibraryEditorSizer(self, database, - [("ImportButton", "ImportESI", _("Import file to ESI files database"), None), - ("DeleteButton", "remove_element", _("Remove file from database"), None)]) + + self.DatabaseSizer = LibraryEditorSizer( + self, database, + [ + ("ImportButton", "ImportESI", _("Import file to ESI files database"), None), + ("DeleteButton", "remove_element", _("Remove file from database"), None) + ]) self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0)) main_sizer.AddSizer(self.DatabaseSizer, border=10, - flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) - - button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) + flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT) + + button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE) button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project")) button_sizer.GetCancelButton().SetLabel(_("Close")) - main_sizer.AddSizer(button_sizer, border=10, - flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) - + main_sizer.AddSizer(button_sizer, border=10, + flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT) + self.SetSizer(main_sizer) - + self.DatabaseSizer.RefreshView() - + def GetValue(self): return self.DatabaseSizer.GetSelectedFilePath() + class LibraryEditor(ConfTreeNodeEditor): - + CONFNODEEDITOR_TABS = [ (_("Modules Library"), "_create_ModuleLibraryEditor")] - + def _create_ModuleLibraryEditor(self, prnt): self.ModuleLibraryEditor = wx.ScrolledWindow(prnt, - style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL) self.ModuleLibraryEditor.Bind(wx.EVT_SIZE, self.OnResize) - - self.ModuleLibrarySizer = LibraryEditorSizer(self.ModuleLibraryEditor, + + self.ModuleLibrarySizer = LibraryEditorSizer( + self.ModuleLibraryEditor, self.Controler.GetModulesLibraryInstance(), - [("ImportButton", "ImportESI", _("Import ESI file"), None), - ("AddButton", "ImportDatabase", _("Add file from ESI files database"), self.OnAddButton), - ("DeleteButton", "remove_element", _("Remove file from library"), None)]) + [ + ("ImportButton", "ImportESI", _("Import ESI file"), None), + ("AddButton", "ImportDatabase", _("Add file from ESI files database"), self.OnAddButton), + ("DeleteButton", "remove_element", _("Remove file from library"), None) + ]) self.ModuleLibrarySizer.SetControlMinSize(wx.Size(0, 200)) self.ModuleLibraryEditor.SetSizer(self.ModuleLibrarySizer) - + return self.ModuleLibraryEditor def __init__(self, parent, controler, window): ConfTreeNodeEditor.__init__(self, parent, controler, window) - + self.RefreshView() - + def RefreshView(self): ConfTreeNodeEditor.RefreshView(self) self.ModuleLibrarySizer.RefreshView() def OnAddButton(self, event): - dialog = DatabaseManagementDialog(self, - self.Controler.GetModulesDatabaseInstance()) - + dialog = DatabaseManagementDialog(self, + self.Controler.GetModulesDatabaseInstance()) + if dialog.ShowModal() == wx.ID_OK: module_library = self.Controler.GetModulesLibraryInstance() module_library.ImportModuleLibrary(dialog.GetValue()) - + dialog.Destroy() - + wx.CallAfter(self.ModuleLibrarySizer.RefreshView) - + event.Skip() def OnResize(self, event): @@ -1398,7 +1424,8 @@ posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) self.ModuleLibraryEditor.Scroll(posx, posy) - self.ModuleLibraryEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, - maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) + self.ModuleLibraryEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, + maxx / SCROLLBAR_UNIT, + maxy / SCROLLBAR_UNIT, + posx, posy) event.Skip() - diff -r e0f16317668e -r 15f18dc8b56a etherlab/EtherCATManagementEditor.py --- a/etherlab/EtherCATManagementEditor.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/EtherCATManagementEditor.py Fri Nov 23 00:33:04 2018 +0100 @@ -1,2207 +1,2160 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# This file is part of Beremiz -# -# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab., University of Seoul -# -# See COPYING file for copyrights details. - -import os - -import wx -import wx.grid -import wx.gizmos -import wx.lib.buttons - -# -------------------------------------------------------------------- -from controls import CustomGrid, CustomTable -# -------------------------------------------------------------------- - -# ------------ for SDO Management -------------------- -import string -import wx.grid as gridlib -#------------------------------------------------------------- - -# ------------ for register management --------------- -from xml.dom import minidom -#------------------------------------------------------------- - -# ----------------------------- For Sync Manager Table ----------------------------------- -def GetSyncManagersTableColnames(): - """ - Returns column names of SyncManager Table in Slave state panel. - """ - _ = lambda x : x - return ["#", _("Name"), _("Start Address"), _("Default Size"), _("Control Byte"), _("Enable")] - -#------------------------------------------------------------------------------- -# Sync Managers Table -#------------------------------------------------------------------------------- -class SyncManagersTable(CustomTable): - def GetValue(self, row, col): - if row < self.GetNumberRows(): - if col == 0: - return row - return self.data[row].get(self.GetColLabelValue(col, False), "") - -#------------------------------------------------------------------------------- -# EtherCAT Management Treebook -#------------------------------------------------------------------------------- -class EtherCATManagementTreebook(wx.Treebook): - def __init__(self, parent, controler, node_editor): - """ - Constructor - @param parent: Reference to the parent wx.ScrolledWindow object - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - @param node_editor: Reference to Beremiz frame - """ - wx.Treebook.__init__(self, parent, -1, size=wx.DefaultSize, style=wx.BK_DEFAULT) - self.parent = parent - self.Controler = controler - self.NodeEditor = node_editor - - self.EtherCATManagementClassObject = {} - - # fill EtherCAT Management Treebook - for pname, pclass, subs in [ - ("Slave State", SlaveStatePanelClass, []), - ("SDO Management", SDOPanelClass, []), - ("PDO Monitoring", PDOPanelClass, []), - ("ESC Management", EEPROMAccessPanel, [ - ("Smart View", SlaveSiiSmartView), - ("Hex View", HexView)]), - ("Register Access", RegisterAccessPanel, [])]: - self.AddPage(pclass(self, self.Controler), pname) - for spname, spclass in subs: - self.AddSubPage(spclass(self, self.Controler), spname) - - self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGED, self.OnPageChanged) - self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGING, self.OnPageChanging) - - def OnPageChanged(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = event.GetSelection() - event.Skip() - - def OnPageChanging(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = event.GetSelection() - event.Skip() - -#------------------------------------------------------------------------------- -# For SlaveState Panel -#------------------------------------------------------------------------------- -class SlaveStatePanelClass(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1, (0, 0), size=wx.DefaultSize, style = wx.SUNKEN_BORDER) - self.Controler = controler - self.parent = parent - - # initialize SlaveStatePanel UI dictionaries - self.StaticBoxDic = {} - self.StaticTextDic = {} - self.TextCtrlDic = {} - self.ButtonDic = {} - - # iniitalize BoxSizer and FlexGridSizer - self.SizerDic = { - "SlaveState_main_sizer" : wx.BoxSizer(wx.VERTICAL), - "SlaveState_inner_main_sizer" : wx.FlexGridSizer(cols=1, hgap=50, rows=3, vgap=10), - "SlaveInfosDetailsInnerSizer" : wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10), - "SyncManagerInnerSizer" : wx.FlexGridSizer(cols=1, hgap=5, rows=1, vgap=5), - "SlaveState_sizer" : wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10), - "SlaveState_up_sizer" : wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10), - "SlaveState_down_sizer" : wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)} - - # initialize StaticBox and StaticBoxSizer - for box_name, box_label in [ - ("SlaveInfosDetailsBox", "Slave Informations"), - ("SyncManagerBox", "Sync Manager"), - ("SlaveStateBox", "Slave State Transition && Monitoring")]: - self.StaticBoxDic[box_name] = wx.StaticBox(self, label=_(box_label)) - self.SizerDic[box_name] = wx.StaticBoxSizer(self.StaticBoxDic[box_name]) - - for statictext_name, statictext_label, textctrl_name in [ - ("VendorLabel", "Vendor:", "vendor"), - ("ProductcodeLabel", "Product code:", "product_code"), - ("RevisionnumberLabel", "Slave Count:", "revision_number"), - ("PhysicsLabel", "Physics:", "physics")]: - self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label)) - self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) - self.SizerDic["SlaveInfosDetailsInnerSizer"].AddMany([self.StaticTextDic[statictext_name], - self.TextCtrlDic[textctrl_name]]) - - self.SizerDic["SlaveInfosDetailsBox"].AddSizer(self.SizerDic["SlaveInfosDetailsInnerSizer"]) - - self.SyncManagersGrid = CustomGrid(self, size=wx.Size(605,155), style=wx.VSCROLL) - - self.SizerDic["SyncManagerInnerSizer"].Add(self.SyncManagersGrid) - self.SizerDic["SyncManagerBox"].Add(self.SizerDic["SyncManagerInnerSizer"]) - - for button_name, button_id, button_label, button_tooltipstring, event_method, sub_item in [ - ("InitButton", 0, "INIT", "State Transition to \"Init\" State", self.OnButtonClick, []), - ("PreOPButton", 1, "PREOP", "State Transition to \"PreOP\" State", self.OnButtonClick, [ - ("TargetStateLabel", "Target State:" , "TargetState")]), - ("SafeOPButton", 2, "SAFEOP", "State Transition to \"SafeOP\" State", self.OnButtonClick, []), - ("OPButton", 3, "OP", "State Transition to \"OP\" State", self.OnButtonClick, [ - ("CurrentStateLabel", "Current State:", "CurrentState")])]: - self.ButtonDic[button_name] = wx.Button(self, id=button_id ,label=_(button_label)) - self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method) - self.ButtonDic[button_name].SetToolTipString(button_tooltipstring) - self.SizerDic["SlaveState_up_sizer"].Add(self.ButtonDic[button_name]) - for statictext_name, statictext_label, textctrl_name in sub_item : - self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label)) - self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.DefaultSize, style=wx.TE_READONLY) - self.SizerDic["SlaveState_up_sizer"].AddMany([self.StaticTextDic[statictext_name], - self.TextCtrlDic[textctrl_name]]) - - for button_name, button_label, button_tooltipstring, event_method in [ - ("StartTimerButton", "Start State Monitoring", "Slave State Update Restart", self.StartTimer), - ("StopTimerButton", "Stop State Monitoring", "Slave State Update Stop", self.CurrentStateThreadStop)]: - self.ButtonDic[button_name] = wx.Button(self, label=_(button_label)) - self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method) - self.ButtonDic[button_name].SetToolTipString(button_tooltipstring) - self.SizerDic["SlaveState_down_sizer"].Add(self.ButtonDic[button_name]) - - self.SizerDic["SlaveState_sizer"].AddMany([self.SizerDic["SlaveState_up_sizer"], - self.SizerDic["SlaveState_down_sizer"]]) - - self.SizerDic["SlaveStateBox"].Add(self.SizerDic["SlaveState_sizer"]) - - self.SizerDic["SlaveState_inner_main_sizer"].AddMany([ - self.SizerDic["SlaveInfosDetailsBox"], self.SizerDic["SyncManagerBox"], - self.SizerDic["SlaveStateBox"]]) - - self.SizerDic["SlaveState_main_sizer"].Add(self.SizerDic["SlaveState_inner_main_sizer"]) - - self.SetSizer(self.SizerDic["SlaveState_main_sizer"]) - - # register a timer for periodic exectuion of slave state update (period: 1000 ms) - self.Bind(wx.EVT_TIMER, self.GetCurrentState) - - self.CreateSyncManagerTable() - - self.Centre() - - def CreateSyncManagerTable(self): - """ - Create grid for "SyncManager" - """ - # declare Table object - self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames()) - self.SyncManagersGrid.SetTable(self.SyncManagersTable) - # set grid alignment attr. (CENTER) - self.SyncManagersGridColAlignements = [wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, - wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE] - # set grid size - self.SyncManagersGridColSizes = [40, 150, 100, 100, 100, 100] - self.SyncManagersGrid.SetRowLabelSize(0) - for col in range(self.SyncManagersTable.GetNumberCols()): - attr = wx.grid.GridCellAttr() - attr.SetAlignment(self.SyncManagersGridColAlignements[col], wx.ALIGN_CENTRE) - self.SyncManagersGrid.SetColAttr(col, attr) - self.SyncManagersGrid.SetColMinimalWidth(col, self.SyncManagersGridColSizes[col]) - self.SyncManagersGrid.AutoSizeColumn(col, False) - - self.RefreshSlaveInfos() - - def RefreshSlaveInfos(self): - """ - Fill data in "Slave Information" and "SyncManager" - """ - slave_infos = self.Controler.GetSlaveInfos() - sync_manager_section = ["vendor", "product_code", "revision_number", "physics"] - if slave_infos is not None: - # this method is same as "TextCtrl.SetValue" - for textctrl_name in sync_manager_section: - self.TextCtrlDic[textctrl_name].SetValue(slave_infos[textctrl_name]) - self.SyncManagersTable.SetData(slave_infos["sync_managers"]) - self.SyncManagersTable.ResetView(self.SyncManagersGrid) - else: - for textctrl_name in sync_manager_section: - self.TextCtrlDic[textctrl_name].SetValue("") - self.SyncManagersTable.SetData([]) - self.SyncManagersTable.ResetView(self.SyncManagersGrid) - - def OnButtonClick(self, event): - """ - Event handler for slave state transition button click (Init, PreOP, SafeOP, OP button) - @param event : wx.EVT_BUTTON object - """ - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag : - state_dic = ["INIT", "PREOP", "SAFEOP", "OP"] - - # If target state is one of {INIT, PREOP, SAFEOP}, request slave state transition immediately. - if event.GetId() < 3 : - self.Controler.CommonMethod.RequestSlaveState(state_dic[event.GetId()]) - self.TextCtrlDic["TargetState"].SetValue(state_dic[event.GetId()]) - - # If target state is OP, first check "PLC status". - # (1) If current PLC status is "Started", then request slave state transition - # (2) Otherwise, show error message and return - else : - status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus() - if status == "Started" : - self.Controler.CommonMethod.RequestSlaveState("OP") - self.TextCtrlDic["TargetState"].SetValue("OP") - else : - self.Controler.CommonMethod.CreateErrorDialog("PLC is Not Started") - - def GetCurrentState(self, event): - """ - Timer event handler for periodic slave state monitoring (Default period: 1 sec = 1000 msec). - @param event : wx.TIMER object - """ - check_connect_flag = self.Controler.CommonMethod.CheckConnect(True) - if check_connect_flag: - returnVal = self.Controler.CommonMethod.GetSlaveStateFromSlave() - line = returnVal.split("\n") - try : - self.SetCurrentState(line[self.Controler.GetSlavePos()]) - except : - pass - - def SetCurrentState(self, line): - """ - Show current slave state using the executiob result of "ethercat slaves" command. - @param line : result of "ethercat slaves" command - """ - state_array = ["INIT", "PREOP", "SAFEOP", "OP"] - try : - # parse the execution result of "ethercat slaves" command - # Result example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100) - token = line.split(" ") - if token[2] in state_array: - self.TextCtrlDic["CurrentState"].SetValue(token[2]) - except : - pass - - def StartTimer(self, event): - """ - Event handler for "Start State Monitoring" button. - - start slave state monitoring thread - @param event : wx.EVT_BUTTON object - """ - self.SlaveStateThread = wx.Timer(self) - # set timer period (1000 ms) - self.SlaveStateThread.Start(1000) - - def CurrentStateThreadStop(self, event): - """ - Event handler for "Stop State Monitoring" button. - - stop slave state monitoring thread - @param event : wx.EVT_BUTTON object - """ - try: - self.SlaveStateThread.Stop() - except: - pass - -#------------------------------------------------------------------------------- -# For SDO Management Panel -#------------------------------------------------------------------------------- -class SDOPanelClass(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1) - - self.DatatypeDescription, self.CommunicationObject, self.ManufacturerSpecific, \ - self.ProfileSpecific, self.Reserved, self.AllSDOData = range(6) - - self.Controler = controler - - self.SDOManagementMainSizer = wx.BoxSizer(wx.VERTICAL) - self.SDOManagementInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10) - - self.SDOUpdate = wx.Button(self, label=_('update')) - self.SDOUpdate.Bind(wx.EVT_BUTTON, self.SDOInfoUpdate) - - self.CallSDONoteBook = SDONoteBook(self, controler=self.Controler) - self.SDOManagementInnerMainSizer.Add(self.SDOUpdate) - self.SDOManagementInnerMainSizer.Add(self.CallSDONoteBook, wx.ALL | wx.EXPAND) - - self.SDOManagementMainSizer.Add(self.SDOManagementInnerMainSizer) - - self.SetSizer(self.SDOManagementMainSizer) - - def SDOInfoUpdate(self, event): - """ - Evenet handler for SDO "update" button. - - Load SDO data from current slave - @param event : wx.EVT_BUTTON object - """ - self.Controler.CommonMethod.SaveSDOData = [] - self.Controler.CommonMethod.ClearSDODataSet() - self.SDOFlag = False - - # Check whether beremiz connected or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - self.SDOs = self.Controler.CommonMethod.GetSlaveSDOFromSlave() - # SDOFlag is "False", user click "Cancel" button - self.SDOFlag = self.SDOParser() - - if self.SDOFlag : - self.CallSDONoteBook.CreateNoteBook() - self.Refresh() - - def SDOParser(self): - """ - Parse SDO data set that obtain "SDOInfoUpdate" Method - @return True or False - """ - - slaveSDO_progress = wx.ProgressDialog("Slave SDO Monitoring", "Now Uploading...", - maximum = len(self.SDOs.splitlines()), parent=self, - style = wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | - wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME | - wx.PD_AUTO_HIDE | wx.PD_SMOOTH) - - # If keep_going flag is False, SDOParser method is stop and return "False". - keep_going = True - count = 0 - - # SDO data example - # SDO 0x1000, "Device type" - # 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474 - for details_line in self.SDOs.splitlines(): - count += 1 - line_token = details_line.split("\"") - # len(line_token[2]) case : SDO 0x1000, "Device type" - if len(line_token[2]) == 0: - title_name = line_token[1] - # else case : 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474 - else : - # line_token = ['0x1000:00,r-r-r-,uint32,32 bit,', 'Device type', ',0x00020192, 131474'] - token_head, name, token_tail = line_token - - # token_head = ['0x1000:00', 'r-r-r-', 'uint32', '32 bit', ''] - token_head = token_head.split(",") - ful_idx, access, type, size, empty = token_head - # ful_idx.split(":") = ['0x1000', '00'] - idx, sub_idx = ful_idx.split(":") - - # token_tail = ['', '0x00020192', '131474'] - token_tail = token_tail.split(",") - try : - empty, hex_val, dec_val = token_tail - - # SDO data is not return "dec value" - # line example : - # 0x1702:01,rwr-r-,uint32,32 bit," 1st mapping", ---- - except : - empty, hex_val = token_tail - - name_after_check = self.StringTest(name) - - # convert hex type - sub_idx = "0x" + sub_idx - - if type == "octet_string": - hex_val = ' ---- ' - - # SResult of SlaveSDO data parsing. (data type : dictionary) - self.Data = {'idx':idx.strip(), 'subIdx':sub_idx.strip(), 'access':access.strip(), - 'type':type.strip(), 'size':size.strip(), 'name':name_after_check.strip("\""), - 'value':hex_val.strip(), "category":title_name.strip("\"")} - - category_divide_value = [0x1000, 0x2000, 0x6000, 0xa000, 0xffff] - - for count in range(len(category_divide_value)) : - if int(idx, 0) < category_divide_value[count]: - self.Controler.CommonMethod.SaveSDOData[count].append(self.Data) - break - - self.Controler.CommonMethod.SaveSDOData[self.AllSDOData].append(self.Data) - - if count >= len(self.SDOs.splitlines()) / 2: - (keep_going, skip) = slaveSDO_progress.Update(count, "Please waiting a moment!!") - else: - (keep_going, skip) = slaveSDO_progress.Update(count) - - # If user click "Cancel" loop suspend immediately - if (keep_going == False): - break - - slaveSDO_progress.Destroy() - return keep_going - - def StringTest(self, check_string): - """ - Test value 'name' is alphanumeric - @param check_string : input data for check - @return result : output data after check - """ - # string.printable is print this result - #'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ - #!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c - allow_range = string.printable - result = check_string - for i in range(0, len(check_string)): - # string.isalnum() is check whether string is alphanumeric or not - if check_string[len(check_string)-1-i:len(check_string)-i] in allow_range : - result = check_string[:len(check_string) - i] - break - return result - - -#------------------------------------------------------------------------------- -# For SDO Notebook (divide category) -#------------------------------------------------------------------------------- -class SDONoteBook(wx.Notebook): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent SDOPanelClass class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Notebook.__init__(self, parent, id = -1, size=(850,500)) - self.Controler = controler - self.parent = parent - - self.CreateNoteBook() - - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged) - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging) - - def CreateNoteBook(self): - """ - Create each NoteBook page, divided SDO index - According to EtherCAT Communication(03/2011), 158p - """ - self.Data = [] - count = 1 - - page_texts = [("all", self.parent.AllSDOData), - ("0x0000 - 0x0ff", self.parent.DatatypeDescription), - ("0x1000 - 0x1fff", self.parent.CommunicationObject), - ("0x2000 - 0x5fff", self.parent.ManufacturerSpecific), - ("0x6000 - 0x9fff", self.parent.ProfileSpecific), - ("0xa000 - 0xffff", self.parent.Reserved)] - - page_tooltip_string = ["SDO Index 0x0000 - 0x0fff : Data Type Description", - "SDO Index 0x1000 - 0x1fff : Communication object", - "SDO Index 0x2000 - 0x5fff : Manufacturer specific", - "SDO Index 0x6000 - 0x9fff : Profile specific", - "SDO Index 0xa000 - 0xffff : Reserved", - "All SDO Object"] - - self.DeleteAllPages() - - for txt, count in page_texts: - self.Data = self.Controler.CommonMethod.SaveSDOData[count] - self.Win = SlaveSDOTable(self, self.Data) - self.AddPage(self.Win, txt) - - def OnPageChanged(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - def OnPageChanging(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - -#------------------------------------------------------------------------------- -# For SDO Grid (fill index, subindex, etc...) -#------------------------------------------------------------------------------- -class SlaveSDOTable(wx.grid.Grid): - def __init__(self, parent, data): - """ - Constructor - @param parent: Reference to the parent SDOPanelClass class - @param data: SDO data after parsing "SDOParser" method - """ - wx.grid.Grid.__init__(self, parent, -1, size=(830,490), - style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL) - - self.Controler = parent.Controler - self.parent = parent - self.SDOFlag = True - if data is None : - self.SDOs = [] - else : - self.SDOs = data - - self.CreateGrid(len(self.SDOs), 8) - SDOCellSize = [(0, 65), (1, 65), (2, 50), (3, 55), - (4, 40), (5, 200), (6, 250), (7, 85)] - - for (index, size) in SDOCellSize: - self.SetColSize(index, size) - - self.SetRowLabelSize(0) - - SDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Access"), - (3, "Type"), (4, "Size"), (5, "Category"), - (6, "Name"), (7, "Value")] - - for (index, label) in SDOTableLabel: - self.SetColLabelValue(index, label) - self.SetColLabelAlignment(index, wx.ALIGN_CENTRE) - - attr = wx.grid.GridCellAttr() - - # for SDO download - self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.SDOModifyDialog) - - for i in range(7): - self.SetColAttr(i,attr) - - self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER) - - self.SetTableValue() - - def SetTableValue(self): - """ - Cell is filled by new parsing data - """ - sdo_list = ['idx', 'subIdx', 'access', 'type', 'size', 'category', 'name', 'value'] - for row_idx in range(len(self.SDOs)): - for col_idx in range(len(self.SDOs[row_idx])): - self.SetCellValue(row_idx, col_idx, self.SDOs[row_idx][sdo_list[col_idx]]) - self.SetReadOnly(row_idx, col_idx, True) - if col_idx < 5 : - self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) - - def CheckSDODataAccess(self, row): - """ - CheckSDODataAccess method is checking that access data has "w" - Access field consist 6 char, if mean - rw rw rw - (preop) (safeop) (op) - Example Access field : rwrwrw, rwrw-- - @param row : Selected cell by user - @return Write_flag : If data has "w", flag is true - """ - write_flag = False - check = self.SDOs[row]['access'] - if check[1:2] == 'w' : - self.Controler.CommonMethod.Check_PREOP = True - write_flag = True - if check[3:4] == 'w' : - self.Controler.CommonMethod.Check_SAFEOP = True - write_flag = True - if check[5:] =='w' : - self.Controler.CommonMethod.Check_OP = True - write_flag = True - - return write_flag - - def DecideSDODownload(self, state): - """ - compare current state and "access" field, - result notify SDOModifyDialog method - @param state : current slave state - @return True or False - """ - # Example of 'state' parameter : "0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)" - state = state[self.Controler.GetSlavePos()].split(" ")[2] - if state == "PREOP" and self.Controler.CommonMethod.Check_PREOP : - return True - elif state == "SAFEOP" and self.Controler.CommonMethod.Check_SAFEOP : - return True - elif state == "OP" and self.Controler.CommonMethod.Check_OP : - return True - - return False - - def ClearStateFlag(self): - """ - Initialize StateFlag - StateFlag is notice SDOData access each slave state - """ - self.Controler.CommonMethod.Check_PREOP = False - self.Controler.CommonMethod.Check_SAFEOP = False - self.Controler.CommonMethod.Check_OP = False - - def SDOModifyDialog (self, event): - """ - Create dialog for SDO value modify - if user enter data, perform command "ethercat download" - @param event : gridlib.EVT_GRID_CELL_LEFT_DCLICK object - """ - self.ClearStateFlag() - - # CheckSDODataAccess is checking that OD(Object Dictionary) has "w" - if event.GetCol() == 7 and self.CheckSDODataAccess(event.GetRow()) : - dlg = wx.TextEntryDialog (self, "Enter hex or dec value (if enter dec value, it automatically conversed hex value)", - "SDOModifyDialog", style = wx.OK | wx.CANCEL) - - start_value = self.GetCellValue(event.GetRow(), event.GetCol()) - dlg.SetValue(start_value) - - if dlg.ShowModal() == wx.ID_OK: - try : - int(dlg.GetValue(), 0) - # check "Access" field - if self.DecideSDODownload(self.Controler.CommonMethod.SlaveState[self.Controler.GetSlavePos()]) : - # Request "SDODownload" - self.Controler.CommonMethod.SDODownload(self.SDOs[event.GetRow()]['type'], self.SDOs[event.GetRow()]['idx'], - self.SDOs[event.GetRow()]['subIdx'], dlg.GetValue()) - self.SetCellValue(event.GetRow(), event.GetCol(), hex(int(dlg.GetValue(), 0))) - else : - self.Controler.CommonMethod.CreateErrorDialog('You cannot SDO download this state') - # Error occured process of "int(variable)" - # User input is not hex, dec value - except ValueError: - self.Controler.CommonMethod.CreateErrorDialog('You can input only hex, dec value') - - -#------------------------------------------------------------------------------- -# For PDO Monitoring Panel -# PDO Class UI : Panel -> Choicebook (RxPDO, TxPDO) -> -# Notebook (PDO Index) -> Grid (PDO entry) -#------------------------------------------------------------------------------- -class PDOPanelClass(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1) - self.Controler = controler - - self.PDOMonitoringEditorMainSizer = wx.BoxSizer(wx.VERTICAL) - self.PDOMonitoringEditorInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10) - - self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler) - self.PDOMonitoringEditorInnerMainSizer.Add(self.CallPDOChoicebook, wx.ALL) - - self.PDOMonitoringEditorMainSizer.Add(self.PDOMonitoringEditorInnerMainSizer) - - self.SetSizer(self.PDOMonitoringEditorMainSizer) - - def PDOInfoUpdate(self): - """ - Call RequestPDOInfo method and create Choicebook - """ - self.Controler.CommonMethod.RequestPDOInfo() - self.CallPDOChoicebook.Destroy() - self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler) - self.Refresh() - - -#------------------------------------------------------------------------------- -# For PDO Choicebook (divide Tx, Rx PDO) -#------------------------------------------------------------------------------- -class PDOChoicebook(wx.Choicebook): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent PDOPanelClass class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Choicebook.__init__(self, parent, id=-1, size=(500, 500), style=wx.CHB_DEFAULT) - self.Controler = controler - - RxWin = PDONoteBook(self, controler=self.Controler, name="Rx") - TxWin = PDONoteBook(self, controler=self.Controler, name="Tx") - self.AddPage(RxWin, "RxPDO") - self.AddPage(TxWin, "TxPDO") - - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged) - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging) - - def OnPageChanged(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - def OnPageChanging(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - -#------------------------------------------------------------------------------- -# For PDO Notebook (divide PDO index) -#------------------------------------------------------------------------------- -class PDONoteBook(wx.Notebook): - def __init__(self, parent, name, controler): - """ - Constructor - @param parent: Reference to the parent PDOChoicebook class - @param name: identifier whether RxPDO or TxPDO - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Notebook.__init__(self, parent, id=-1, size=(640, 400)) - self.Controler = controler - - count = 0 - page_texts = [] - - self.Controler.CommonMethod.RequestPDOInfo() - - if name == "Tx" : - # obtain pdo_info and pdo_entry - # pdo_info include (PDO index, name, number of entry) - pdo_info = self.Controler.CommonMethod.GetTxPDOCategory() - pdo_entry = self.Controler.CommonMethod.GetTxPDOInfo() - for tmp in pdo_info : - title = str(hex(tmp['pdo_index'])) - page_texts.append(title) - # RX PDO case - else : - pdo_info = self.Controler.CommonMethod.GetRxPDOCategory() - pdo_entry = self.Controler.CommonMethod.GetRxPDOInfo() - for tmp in pdo_info : - title = str(hex(tmp['pdo_index'])) - page_texts.append(title) - - # Add page depending on the number of pdo_info - for txt in page_texts: - win = PDOEntryTable(self, pdo_info, pdo_entry, count) - self.AddPage(win, txt) - count += 1 - - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged) - self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging) - - def OnPageChanged(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - def OnPageChanging(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - -#------------------------------------------------------------------------------- -# For PDO Grid (fill entry index, subindex etc...) -#------------------------------------------------------------------------------- -class PDOEntryTable(wx.grid.Grid): - def __init__(self, parent, info, entry, count): - """ - Constructor - @param parent: Reference to the parent PDONoteBook class - @param info : data structure including entry index, sub index, name, length, type - @param entry : data structure including index, name, entry number - @param count : page number - """ - wx.grid.Grid.__init__(self, parent, -1, size=(500, 400), pos=wx.Point(0,0), - style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL) - - self.Controler = parent.Controler - - self.PDOInfo = info - self.PDOEntry = entry - self.Count = count - - self.CreateGrid(self.PDOInfo[self.Count]['number_of_entry'], 5) - self.SetColLabelSize(25) - self.SetRowLabelSize(0) - - PDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Length"), - (3, "Type"), (4, "Name")] - - for (index, label) in PDOTableLabel: - self.SetColLabelValue(index, label) - - PDOCellSize = [(0, 45), (1, 65), (2, 55), (3, 40), (4, 300)] - - for (index, size) in PDOCellSize: - self.SetColSize(index, size) - self.SetColLabelAlignment(index, wx.ALIGN_LEFT) - - attr = wx.grid.GridCellAttr() - - for i in range(5): - self.SetColAttr(i, attr) - - self.SetTableValue() - - def SetTableValue(self): - """ - Cell is filled by new parsing data in XML - """ - list_index = 0 - # number of entry - for i in range(self.Count + 1) : - list_index += self.PDOInfo[i]['number_of_entry'] - - start_value = list_index - self.PDOInfo[self.Count]['number_of_entry'] - - pdo_list = ['entry_index', 'subindex', 'bitlen', 'type', 'name'] - for row_idx in range(self.PDOInfo[self.Count]['number_of_entry']): - for col_idx in range(len(self.PDOEntry[row_idx])): - # entry index is converted hex value. - if col_idx == 0 : - self.SetCellValue(row_idx, col_idx, hex(self.PDOEntry[start_value][pdo_list[col_idx]])) - else : - self.SetCellValue(row_idx, col_idx, str(self.PDOEntry[start_value][pdo_list[col_idx]])) - if col_idx != 4 : - self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) - else : - self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_LEFT, wx.ALIGN_CENTRE) - self.SetReadOnly(row_idx, col_idx, True) - self.SetRowSize(row_idx, 25) - start_value += 1 - - -#------------------------------------------------------------------------------- -# For EEPROM Access Main Panel -# (This class explain EEPROM Access) -#------------------------------------------------------------------------------- -class EEPROMAccessPanel(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1) - sizer = wx.FlexGridSizer(cols=1, hgap=20,rows=3, vgap=20) - - line = wx.StaticText(self, -1, "\n EEPROM Access is composed to SmartView and HexView. \ - \n\n - SmartView shows Config Data, Device Identity, Mailbox settings, etc. \ - \n\n - HexView shows EEPROM's contents.") - - sizer.Add(line) - - self.SetSizer(sizer) - - -#------------------------------------------------------------------------------- -# For Smart View Panel -#------------------------------------------------------------------------------- -class SlaveSiiSmartView(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1) - self.parent = parent - self.Controler = controler - - self.PDIType = {0 :['none', '00000000'], - 4 :['Digital I/O', '00000100'], - 5 :['SPI Slave', '00000101'], - 7 :['EtherCAT Bridge (port3)', '00000111'], - 8 :['uC async. 16bit', '00001000'], - 9 :['uC async. 8bit', '00001001'], - 10 :['uC sync. 16bit', '00001010'], - 11 :['uC sync. 8bit', '00001011'], - 16 :['32 Digtal Input and 0 Digital Output', '00010000'], - 17 :['24 Digtal Input and 8 Digital Output', '00010001'], - 18 :['16 Digtal Input and 16 Digital Output','00010010'], - 19 :['8 Digtal Input and 24 Digital Output', '00010011'], - 20 :['0 Digtal Input and 32 Digital Output', '00010100'], - 128:['On-chip bus', '11111111'] - } - - sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=2, vgap=5) - button_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=5) - - for button, mapping_method in [("Write EEPROM", self.WriteToEEPROM), - ("Read EEPROM", self.ReadFromEEPROM)]: - btn = wx.Button(self, -1, button, size=(150, 40)) - button_sizer.Add(btn, border=10, flag=wx.ALL) - btn.Bind(wx.EVT_BUTTON, mapping_method) - - self.TreeListCtrl = SmartViewTreeListCtrl(self, self.Controler) - - sizer.Add(button_sizer, border=10, flag=wx.ALL) - sizer.Add(self.TreeListCtrl, border=10, flag=wx.ALL) - self.SetSizer(sizer) - - self.Create_SmartView() - - def Create_SmartView(self): - """ - SmartView shows information based on XML as initial value. - """ - self.Controler.CommonMethod.SmartViewInfosFromXML = self.Controler.CommonMethod.GetSmartViewInfos() - self.SetXMLData() - - def WriteToEEPROM(self, event): - """ - Open binary file (user select) and write the selected binary data to EEPROM - @param event : wx.EVT_BUTTON object - """ - # Check whether beremiz connected or not, and whether status is "Started" or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus() - if status is not "Started": - dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", _("bin files (*.bin)|*.bin"), wx.OPEN) - - if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - try: - binfile = open(filepath,"rb") - self.SiiBinary = binfile.read() - dialog.Destroy() - - self.Controler.CommonMethod.SiiWrite(self.SiiBinary) - # refresh data structure kept by master - self.Controler.CommonMethod.Rescan() - # save binary data as inner global data of beremiz - # for fast loading when slave plugin node is reopened. - self.Controler.CommonMethod.SiiData = self.SiiBinary - self.SetEEPROMData() - except: - self.Controler.CommonMethod.CreateErrorDialog('The file does not exist!') - dialog.Destroy() - - def ReadFromEEPROM(self, event): - """ - Refresh displayed data based on slave EEPROM and save binary file through dialog - @param event : wx.EVT_BUTTON object - """ - # Check whether beremiz connected or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - self.SiiBinary = self.Controler.CommonMethod.LoadData() - self.SetEEPROMData() - dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), - "slave0.bin", _("bin files (*.bin)|*.bin|All files|*.*"), - wx.SAVE|wx.OVERWRITE_PROMPT) - - if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - binfile = open(filepath,"wb") - binfile.write(self.SiiBinary) - binfile.close() - - dialog.Destroy() - - def SetXMLData(self): - """ - Set data based on XML initially - """ - # Config Data: EEPROM Size, PDI Type, Device Emulation - # Find PDI Type in pdiType dictionary - cnt_pdi_type = self.Controler.CommonMethod.SmartViewInfosFromXML["pdi_type"] - for i in self.PDIType.keys(): - if cnt_pdi_type == i: - cnt_pdi_type = self.PDIType[i][0] - break - # Set Config Data - for treelist, data in [("EEPROM Size (Bytes)", - str(self.Controler.CommonMethod.SmartViewInfosFromXML["eeprom_size"])), - ("PDI Type", - cnt_pdi_type), - ("Device Emulation", - self.Controler.CommonMethod.SmartViewInfosFromXML["device_emulation"])]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1) - - # Device Identity: Vendor ID, Product Code, Revision No., Serial No. - # Set Device Identity - for treelist, data in [("Vendor ID", self.Controler.CommonMethod.SmartViewInfosFromXML["vendor_id"]), - ("Product Code", self.Controler.CommonMethod.SmartViewInfosFromXML["product_code"]), - ("Revision No.", self.Controler.CommonMethod.SmartViewInfosFromXML["revision_no"]), - ("Serial No.", self.Controler.CommonMethod.SmartViewInfosFromXML["serial_no"])]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1) - - # Mailbox: Supported Mailbox, Bootstrap Configuration, Standard Configuration - # Set Mailbox - for treelist, data in [("Supported Mailbox", self.Controler.CommonMethod.SmartViewInfosFromXML["supported_mailbox"]), - ("Bootstrap Configuration", ""), - ("Standard Configuration", "")]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1) - # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size - for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outstart"]), - ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outlength"]), - ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_instart"]), - ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_inlength"])]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1) - # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size - for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outstart"]), - ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outlength"]), - ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_instart"]), - ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_inlength"])]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1) - - def SetEEPROMData(self): - """ - Set data based on slave EEPROM. - """ - # sii_dict = { Parameter : (WordAddress, WordSize) } - sii_dict= { 'PDIControl' : ( '0', 1), - 'PDIConfiguration' : ( '1', 1), - 'PulseLengthOfSYNCSignals' : ( '2', 1), - 'ExtendedPDIConfiguration' : ( '3', 1), - 'ConfiguredStationAlias' : ( '4', 1), - 'Checksum' : ( '7', 1), - 'VendorID' : ( '8', 2), - 'ProductCode' : ( 'a', 2), - 'RevisionNumber' : ( 'c', 2), - 'SerialNumber' : ( 'e', 2), - 'Execution Delay' : ('10', 1), - 'Port0Delay' : ('11', 1), - 'Port1Delay' : ('12', 1), - 'BootstrapReceiveMailboxOffset' : ('14', 1), - 'BootstrapReceiveMailboxSize' : ('15', 1), - 'BootstrapSendMailboxOffset' : ('16', 1), - 'BootstrapSendMailboxSize' : ('17', 1), - 'StandardReceiveMailboxOffset' : ('18', 1), - 'StandardReceiveMailboxSize' : ('19', 1), - 'StandardSendMailboxOffset' : ('1a', 1), - 'StandardSendMailboxSize' : ('1b', 1), - 'MailboxProtocol' : ('1c', 1), - 'Size' : ('3e', 1), - 'Version' : ('3f', 1), - 'First Category Type/Vendor Specific' : ('40', 1), - 'Following Category Word Size' : ('41', 1), - 'Category Data' : ('42', 1), - } - - # Config Data: EEPROM Size, PDI Type, Device Emulation - # EEPROM's data in address '0x003f' is Size of EEPROM in KBit-1 - eeprom_size = str((int(self.GetWordAddressData( sii_dict.get('Size'),10 ))+1)/8*1024) - # Find PDI Type in pdiType dictionary - cnt_pdi_type = int(self.GetWordAddressData( sii_dict.get('PDIControl'),16 ).split('x')[1][2:4], 16) - for i in self.PDIType.keys(): - if cnt_pdi_type == i: - cnt_pdi_type = self.PDIType[i][0] - break - # Get Device Emulation - device_emulation = str(bool(int("{:0>16b}".format(int(self.GetWordAddressData( sii_dict.get('PDIControl'),16 ), 16))[7]))) - # Set Config Data - for treelist, data in [("EEPROM Size (Bytes)", eeprom_size), - ("PDI Type", cnt_pdi_type), - ("Device Emulation", device_emulation)]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1) - - # Device Identity: Vendor ID, Product Code, Revision No., Serial No. - # Set Device Identity - for treelist, data in [("Vendor ID", self.GetWordAddressData( sii_dict.get('VendorID'),16 )), - ("Product Code", self.GetWordAddressData( sii_dict.get('ProductCode'),16 )), - ("Revision No.", self.GetWordAddressData( sii_dict.get('RevisionNumber'),16 )), - ("Serial No.", self.GetWordAddressData( sii_dict.get('SerialNumber'),16 ))]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1) - - # Mailbox - # EEORPOM's word address '1c' indicates supported mailbox protocol. - # each value of mailbox protocol : - # VoE(0x0020), SoE(0x0010), FoE(0x0008), CoE(0x0004), EoE(0x0002), AoE(0x0001) - supported_mailbox = "" - mailbox_protocol=["VoE, ", "SoE, ", "FoE, ", "CoE, ", "EoE, ", "AoE, "] - mailbox_data = "{:0>8b}".format(int(self.GetWordAddressData( sii_dict.get('MailboxProtocol'),16 ), 16)) - for protocol in range(6): - if mailbox_data[protocol+2] == '1': - supported_mailbox += mailbox_protocol[protocol] - supported_mailbox = supported_mailbox.strip(", ") - # Set Mailbox - for treelist, data in [("Supported Mailbox", supported_mailbox), - ("Bootstrap Configuration", ""), - ("Standard Configuration", "")]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1) - # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size - for treelist, data in [("Receive Offset", self.GetWordAddressData( sii_dict.get('BootstrapReceiveMailboxOffset'),10 )), - ("Receive Size", self.GetWordAddressData( sii_dict.get('BootstrapReceiveMailboxSize'),10 )), - ("Send Offset", self.GetWordAddressData( sii_dict.get('BootstrapSendMailboxOffset'),10 )), - ("Send Size", self.GetWordAddressData( sii_dict.get('BootstrapSendMailboxSize'),10 ))]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1) - # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size - for treelist, data in [("Receive Offset", self.GetWordAddressData( sii_dict.get('StandardReceiveMailboxOffset'),10 )), - ("Receive Size", self.GetWordAddressData( sii_dict.get('StandardReceiveMailboxSize'),10 )), - ("Send Offset", self.GetWordAddressData( sii_dict.get('StandardSendMailboxOffset'),10 )), - ("Send Size", self.GetWordAddressData( sii_dict.get('StandardSendMailboxSize'),10 ))]: - self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1) - - def MakeStaticBoxSizer(self, boxlabel): - """ - Make StaticBoxSizer - @param boxlabel : label of box sizer - @return sizer : the StaticBoxSizer labeled 'boxlabel' - """ - box = wx.StaticBox(self, -1, boxlabel) - sizer = wx.StaticBoxSizer(box, wx.VERTICAL) - - return sizer - - def GetWordAddressData(self, dict_tuple, format): - """ - This method converts word address data from EEPROM binary. - @param dict_tuple : element of 'sii_dict' dictionary in SetEEPROMData() - @param format : format of data. It can be 16(hex), 10(decimal) and 2(binary). - @return formatted value - """ - offset = int(str(dict_tuple[0]), 16) * 2 - length = int(str(dict_tuple[1]), 16) * 2 - list = [] - data = '' - for index in range(length): - hexdata = hex(ord(self.SiiBinary[offset + index]))[2:] - list.append(hexdata.zfill(2)) - - list.reverse() - data = list[0:length] - - if format == 16: - return '0x' + ''.join(data) - elif format == 10: - return str(int(str(''.join(data)), 16)) - elif format == 2: - ''.join(data) - - -#------------------------------------------------------------------------------- -# For Smart View TreeListCtrl -#------------------------------------------------------------------------------- -class SmartViewTreeListCtrl(wx.Panel): - def __init__(self, parent, Controler): - """ - Constructor - @param parent: Reference to the parent SlaveSiiSmartView class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - - wx.Panel.__init__(self, parent, -1, size=(350, 500)) - - self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=(350, 500), - style=wx.TR_DEFAULT_STYLE - |wx.TR_FULL_ROW_HIGHLIGHT - |wx.TR_HIDE_ROOT - |wx.TR_COLUMN_LINES - |wx.TR_ROW_LINES) - - self.Tree.AddColumn("Description", width=200) - self.Tree.AddColumn("Value", width=140) - self.Tree.SetMainColumn(0) - - self.Root = self.Tree.AddRoot("") - - # Add item - # Level 1 nodes - self.Level1Nodes = {} - for lv1 in ["Config Data", "Device Identity", "Mailbox"]: - self.Level1Nodes[lv1] = self.Tree.AppendItem(self.Root, lv1) - - # Level 2 nodes - # Config Data - self.ConfigData = {} - for lv2 in ["EEPROM Size (Bytes)", "PDI Type", "Device Emulation"]: - self.ConfigData[lv2] = self.Tree.AppendItem(self.Level1Nodes["Config Data"], lv2) - # Device Identity - self.DeviceIdentity = {} - for lv2 in ["Vendor ID", "Product Code", "Revision No.", "Serial No."]: - self.DeviceIdentity[lv2] = self.Tree.AppendItem(self.Level1Nodes["Device Identity"], lv2) - # Mailbox - self.Mailbox = {} - for lv2 in ["Supported Mailbox", "Bootstrap Configuration", "Standard Configuration"]: - self.Mailbox[lv2] = self.Tree.AppendItem(self.Level1Nodes["Mailbox"], lv2) - - # Level 3 nodes - # Children of Bootstrap Configuration - self.BootstrapConfig = {} - for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]: - self.BootstrapConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Bootstrap Configuration"], lv3) - # Children of Standard Configuration - self.StandardConfig = {} - for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]: - self.StandardConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Standard Configuration"], lv3) - - # Expand Tree - for tree in [self.Root, - self.Level1Nodes["Config Data"], - self.Level1Nodes["Device Identity"], - self.Level1Nodes["Mailbox"], - self.Mailbox["Bootstrap Configuration"], - self.Mailbox["Standard Configuration"]]: - self.Tree.Expand(tree) - - -#------------------------------------------------------------------------------- -# For Hex View Panel -# shows EEPROM binary as hex data and characters. -#------------------------------------------------------------------------------- -class HexView(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: Reference to the parent EtherCATManagementTreebook class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1) - self.parent = parent - self.Controler = controler - - self.HexRow = 8 - self.HexCol = 17 - - self.HexViewSizer = {"view" : wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10), - "siiButton" : wx.BoxSizer()} - self.HexViewButton = {} - - for key, evt_handler in [("Sii Upload", self.OnButtonSiiUpload), - ("Sii Download", self.OnButtonSiiDownload), - ("Write to File", self.OnButtonWriteToBinFile), - ("Read from File", self.OnButtonReadFromBinFile), - ("XML to EEPROM Image", self.OnButtonXmlToEEPROMImg)]: - self.HexViewButton[key] = wx.Button(self, -1, key) - self.HexViewButton[key].Bind(wx.EVT_BUTTON, evt_handler) - self.HexViewSizer["siiButton"].Add(self.HexViewButton[key]) - - self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom() - self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) - self.SiiGrid = SiiGridTable(self, self.Controler, self.HexRow, self.HexCol) - self.HexViewSizer["view"].AddMany([self.HexViewSizer["siiButton"], self.SiiGrid]) - self.SiiGrid.CreateGrid(self.HexRow, self.HexCol) - self.SetSizer(self.HexViewSizer["view"]) - self.HexViewSizer["view"].FitInside(self.parent.parent) - self.parent.parent.FitInside() - self.SiiGrid.SetValue(self.HexCode) - self.SiiGrid.Update() - - def UpdateSiiGridTable(self, row, col): - """ - Destroy existing grid and recreate - @param row, col : Hex View grid size - """ - self.HexViewSizer["view"].Detach(self.SiiGrid) - self.SiiGrid.Destroy() - self.SiiGrid = SiiGridTable(self, self.Controler, row, col) - self.HexViewSizer["view"].Add(self.SiiGrid) - self.SiiGrid.CreateGrid(row, col) - self.SetSizer(self.HexViewSizer["view"]) - self.HexViewSizer["view"].FitInside(self.parent.parent) - self.parent.parent.FitInside() - - def OnButtonSiiUpload(self, event): - """ - Load EEPROM data from slave and refresh Hex View grid - Binded to 'Sii Upload' button. - @param event : wx.EVT_BUTTON object - """ - # Check whether beremiz connected or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - # load from EEPROM data and parsing - self.SiiBinary = self.Controler.CommonMethod.LoadData() - self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) - self.UpdateSiiGridTable(self.HexRow, self.HexCol) - self.SiiGrid.SetValue(self.HexCode) - self.SiiGrid.Update() - - def OnButtonSiiDownload(self, event): - """ - Write current EEPROM data to slave and refresh data structure kept by master - Binded to 'Sii Download' button. - @param event : wx.EVT_BUTTON object - """ - # Check whether beremiz connected or not, - # and whether status is "Started" or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus() - if status is not "Started": - self.Controler.CommonMethod.SiiWrite(self.SiiBinary) - self.Controler.CommonMethod.Rescan() - - def OnButtonWriteToBinFile(self, event): - """ - Save current EEPROM data to binary file through FileDialog - Binded to 'Write to File' button. - @param event : wx.EVT_BUTTON object - """ - dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), "slave0.bin", - _("bin files (*.bin)|*.bin|All files|*.*"), wx.SAVE|wx.OVERWRITE_PROMPT) - - if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - binfile = open(filepath,"wb") - binfile.write(self.SiiBinary) - binfile.close() - - dialog.Destroy() - - def OnButtonReadFromBinFile(self, event): - """ - Load binary file through FileDialog - Binded to 'Read from File' button. - @param event : wx.EVT_BUTTON object - """ - dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", - _("bin files (*.bin)|*.bin"), wx.OPEN) - - if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - - try: - binfile = open(filepath, "rb") - self.SiiBinary = binfile.read() - self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) - self.UpdateSiiGridTable(self.HexRow, self.HexCol) - self.SiiGrid.SetValue(self.HexCode) - self.SiiGrid.Update() - except: - self.Controler.CommonMethod.CreateErrorDialog('The file does not exist!') - - dialog.Destroy() - - def OnButtonXmlToEEPROMImg(self, event): - """ - Create EEPROM data based XML data that current imported - Binded to 'XML to EEPROM' button. - @param event : wx.EVT_BUTTON object - """ - self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom() - self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) - self.UpdateSiiGridTable(self.HexRow, self.HexCol) - self.SiiGrid.SetValue(self.HexCode) - self.SiiGrid.Update() - - -#------------------------------------------------------------------------------- -# For Hex View grid (fill hex data) -#------------------------------------------------------------------------------- -class SiiGridTable(wx.grid.Grid): - def __init__(self, parent, controler, row, col): - """ - Constructor - @param parent: Reference to the parent HexView class - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - @param row, col: Hex View grid size - """ - self.parent = parent - self.Controler = controler - self.Row = row - self.Col = col - - wx.grid.Grid.__init__(self, parent, -1, size=(830,450), - style=wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL) - - def SetValue(self, value): - """ - Set data in the table - @param value: EEPROM data list of which element is 1 Byte hex data - """ - # set label name and size - self.SetRowLabelSize(100) - for col in range(self.Col): - if col == 16: - self.SetColLabelValue(16, "Text View") - self.SetColSize(16, (self.GetSize().x-120)*4/20) - else: - self.SetColLabelValue(col, '%s'%col) - self.SetColSize(col, (self.GetSize().x-120)/20) - - # set data into table - row = col = 0 - for row_idx in value: - col = 0 - self.SetRowLabelValue(row, "0x"+"{:0>4x}".format(row*(self.Col-1))) - for hex in row_idx: - self.SetCellValue(row, col, hex) - - if col == 16: - self.SetCellAlignment(row, col, wx.ALIGN_LEFT, wx.ALIGN_CENTER) - else: - self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) - - self.SetReadOnly(row, col, True) - col = col + 1 - row = row + 1 - - -#------------------------------------------------------------------------------- -# For Register Access Panel -#------------------------------------------------------------------------------- -class RegisterAccessPanel(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: EEPROMAccessPanel object - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - self.parent = parent - self.Controler = controler - self.__init_data() - - wx.Panel.__init__(self, parent, -1) - - sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=2, vgap=5) - button_sizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10) - - self.ReloadButton = wx.Button(self, -1, "Reload") - self.CompactViewCheckbox = wx.CheckBox(self, -1, "Compact View") - self.RegisterNotebook = RegisterNotebook(self, self.Controler) - - button_sizer.AddMany([self.ReloadButton, self.CompactViewCheckbox]) - sizer.AddMany([button_sizer, self.RegisterNotebook]) - self.SetSizer(sizer) - - self.ReloadButton.Bind(wx.EVT_BUTTON, self.OnReloadButton) - self.CompactViewCheckbox.Bind(wx.EVT_CHECKBOX, self.ToggleCompactViewCheckbox) - - for index in range(4): - self.RegisterNotebook.RegPage[index].MainTable.CreateGrid(self.MainRow[index], self.MainCol) - self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512) - - # data default setting - if self.Controler.CommonMethod.RegData == "": - self.CompactViewCheckbox.Disable() - for index in range(4): - self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512) - else: # If data was saved, - self.BasicSetData() - self.ParseData() - for index in range(4): - self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, self.RegMonitorData, index*512, (index+1)*512) - - def __init_data(self): - """ - Declare initial data. - """ - # flag for compact view - self.CompactFlag = False - - # main grid의 rows and cols - self.MainRow = [512, 512, 512, 512] - self.MainCol = 4 - - # main grids' data range - self.PageRange = [] - for index in range(4): - self.PageRange.append([512*index, 512*(index+1)]) - - # Previous value of register data for register description configuration - self.PreRegSpec = {"ESCType": "", - "FMMUNumber": "", - "SMNumber": "", - "PDIType": ""} - - def LoadData(self): - """ - Get data from the register. - """ - self.Controler.CommonMethod.RegData = "" - #ethercat reg_read - #ex : ethercat reg_read -p 0 0x0000 0x0001 - #return value : 0x11 - for index in range(4): - self.Controler.CommonMethod.RegData = self.Controler.CommonMethod.RegData + " " + self.Controler.CommonMethod.RegRead("0x"+"{:0>4x}".format(index*1024), "0x0400") - - # store previous value - # (ESC type, port number of FMMU, port number of SM, and PDI type)) - for reg_spec in ["ESCType","FMMUNumber","SMNumber", "PDIType"]: - self.PreRegSpec[reg_spec] = self.Controler.CommonMethod.CrtRegSpec[reg_spec] - - # update registers' description - # (ESC type, port number of FMMU, port number of SM, and PDI type) - for reg_spec, address in [("ESCType", "0x0000"), - ("FMMUNumber", "0x0004"), - ("SMNumber", "0x0005"), - ("PDIType", "0x0140")]: - self.Controler.CommonMethod.CrtRegSpec[reg_spec] = self.Controler.CommonMethod.RegRead(address, "0x0001") - - # Enable compactView checkbox - self.CompactViewCheckbox.Enable() - - def BasicSetData(self): - """ - Get and save the description of registers. - It's done by parsing register_information.xml. - """ - # parse the above register's value - # If the value is 0x12, the result is 12 - self.ESCType = self.Controler.CommonMethod.CrtRegSpec["ESCType"].split('x')[1] - self.PDIType = self.Controler.CommonMethod.CrtRegSpec["PDIType"].split('x')[1] - # If the value is 0x12, the result is 18 (It's converted to decimal value) - self.FMMUNumber = int(self.Controler.CommonMethod.CrtRegSpec["FMMUNumber"], 16) - self.SMNumber = int(self.Controler.CommonMethod.CrtRegSpec["SMNumber"], 16) - - # initialize description dictionary of register main table and register sub table. - self.RegisterDescriptionDict = {} - self.RegisterSubGridDict = {} - - # ./EthercatMaster/register_information.xml contains register description. - if wx.Platform == '__WXMSW__': - reg_info_file = open("../../EthercatMaster/register_information.xml", 'r') - else: - reg_info_file = open("./EthercatMaster/register_information.xml", 'r') - reg_info_tree = minidom.parse(reg_info_file) - reg_info_file.close() - - # parse register description - for register_info in reg_info_tree.childNodes: - for register in register_info.childNodes: - if register.nodeType == reg_info_tree.ELEMENT_NODE and register.nodeName == "Register": - # If it depends on the property(ESC type, PDI type, FMMU number, SM number) - for property, type, value in [("esc", "type", self.ESCType), - ("pdi", "type", self.PDIType), - ("fmmu", "number", self.FMMUNumber), - ("sm", "number", self.SMNumber)]: - if property in register.attributes.keys(): - if type == "type": - if register.attributes[property].value == value: - self.GetRegisterInfo(reg_info_tree, register) - break - else: # type == "number" - if register.attributes[property].value < value: - self.GetRegisterInfo(reg_info_tree, register) - break - else: - self.GetRegisterInfo(reg_info_tree, register) - break - - def GetRegisterInfo(self, reg_info_tree, register): - """ - Save the register's description into the dictionary. - reg_info_tree is based on the register_information.xml. - @param reg_info_tree: XML tree - @param register: register which you want to get the description - """ - # temporary variables for register main table idescription dictionary - reg_index = "" - reg_main_description = "" - - for data in register.childNodes: - if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Index": - for index in data.childNodes: - reg_index = index.nodeValue - if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Description": - for description in data.childNodes: - reg_main_description = description.nodeValue - - # Add description for register main table - if reg_index is not "" and reg_main_description is not "": - self.RegisterDescriptionDict[reg_index] = reg_main_description - - if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Details": - # declare register sub table description dictionary about this index - self.RegisterSubGridDict[reg_index] = [] - - for detail in data.childNodes: - if detail.nodeType == reg_info_tree.ELEMENT_NODE and detail.nodeName == "Detail": - # If it depends on the property(ESC type, PDI type, FMMU number, SM number) - for property, type, value in [("esc", "type", self.ESCType), - ("pdi", "type", self.PDIType), - ("fmmu", "number", self.FMMUNumber), - ("sm", "number", self.SMNumber)]: - if property in detail.attributes.keys(): - if type == "type": - if detail.attributes[property].value == value: - self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) - break - else: # type == "number" - if detail.attributes[property].value < value: - self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) - break - else: - self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) - break - - def GetRegisterDetailInfo(self, reg_info_tree, reg_index, detail): - """ - Get the resgister's detailed description(for sub table) from the reg_info_tree. - @param reg_info_tree: XML tree (register_information.xml) - @param reg_index: index of the register - @param detail: description of the register - """ - # temporary variables for register sub table description dictionary - # - It is initialized in every sub description - reg_bit_range = "" - reg_sub_description = "" - reg_enum_dictionary = {} - - for detail_data in detail.childNodes: - if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Range": - for range in detail_data.childNodes: - reg_bit_range = range.nodeValue - if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Description": - for description in detail_data.childNodes: - reg_sub_description = description.nodeValue - - if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Enum": - for enum in detail_data.childNodes: - if enum.nodeType == reg_info_tree.ELEMENT_NODE and enum.nodeName == "item": - - # temporary variables for a description of each value - # For example, if the bit is 1, it is 'enabled'('On', 'True', etc.), - # otherwise 'disabled'('Off', 'False', etc.). - reg_sub_value = "" - reg_sub_value_description = "" - - for item in enum.childNodes: - if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "value": - for value in item.childNodes: - reg_sub_value = value.nodeValue - if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "Description": - for description in item.childNodes: - reg_sub_value_description = description.nodeValue - - # Add a description of each value to register enum dictionary - if reg_sub_value is not "" and reg_sub_value_description is not "": - reg_enum_dictionary[reg_sub_value] = reg_sub_value_description - - # add a description to register sub table description dictionary - if reg_bit_range is not "" and reg_sub_description is not "": - self.RegisterSubGridDict[reg_index].append([reg_bit_range, - reg_sub_description, reg_enum_dictionary]) - - def ParseData(self): - """ - Transform the data into dec, hex, string, and description - """ - row_data = [] - self.RegMonitorData = [] - reg_word = "" - - reg_data = self.Controler.CommonMethod.RegData.split() - - # loop for register(0x0000:0x0fff) - for address in range(0x1000): - # arrange 2 Bytes of register data - reg_word = reg_data[address].split('x')[1] + reg_word - if (address%2) == 1: - # append address - hex_address = "{:0>4x}".format(address-1) - row_data.append(hex_address) - - # append description - if self.RegisterDescriptionDict.has_key(hex_address): - row_data.append(self.RegisterDescriptionDict[hex_address]) - else: - row_data.append("") - - # append Decimal value - row_data.append(str(int(reg_word, 16))) - - # append Hex value - row_data.append('0x'+reg_word) - - # append ASCII value - char_data = "" - for iter in range(2): - if int(reg_word[iter*2:iter*2+2], 16)>=32 and int(reg_word[iter*2:iter*2+2], 16)<=126: - char_data = char_data + chr(int(reg_word[iter*2:iter*2+2], 16)) - else: - char_data = char_data + "." - row_data.append(char_data) - - self.RegMonitorData.append(row_data) - reg_word = "" # initialize regWord - row_data = [] - - def OnReloadButton(self, event): - """ - Handle the click event of the 'Reload' button. - Get the data from registers again, and update the table. - @param event: wx.EVT_BUTTON object - """ - # Check whether beremiz connected or not. - check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) - if check_connect_flag: - self.LoadData() - self.BasicSetData() - self.ParseData() - # set data into UI - if self.CompactFlag: - self.ToggleCompactViewCheckbox(True) - else : - for index in range(4): - self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol, - self.PageRange[index][0], self.PageRange[index][1], - self.RegMonitorData) - - def ToggleCompactViewCheckbox(self, event): - """ - Handles the event of the 'Compact view' check box. - If it's checked, show only the registers that have a description. - If not, show all the registers. - @param event: wx.EVT_CHECKBOX object - """ - - # If "Compact View" Checkbox is True - ## 'event' is argument of this method or event of checkbox. - if event==True or event.GetEventObject().GetValue(): - self.CompactFlag = True - - reg_compact_data = [] - page_row = [0, 0, 0, 0] - for index in range(4): - self.PageRange[index] = [0, 0] - - for reg_row_data in self.RegMonitorData: - if reg_row_data[1] is not "": - # data structure for "compact view" - reg_compact_data.append(reg_row_data) - # count for each register notebooks' row - # It compare with register's address. - for index in range(4): - if int('0x'+reg_row_data[0], 16) < (index+1)*1024: - page_row[index] += 1 - break - - # Setting tables' rows and cols, range for compact view - for index in range(4): - self.MainRow[index] = page_row[index] - self.PageRange[index][1] = page_row[index] - for iter in range(index): - self.PageRange[index][0] += page_row[iter] - self.PageRange[index][1] += page_row[iter] - - # Update table - for index in range(4): - self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol, - self.PageRange[index][0], self.PageRange[index][1], - reg_compact_data) - - # Compact View Checkbox is False - else: - self.CompactFlag = False - # Setting original rows, cols and range - self.MainRow = [512, 512, 512, 512] - self.PageRange = [] - - for index in range(4): - self.PageRange.append([512*index, 512*(index+1)]) - - # Update table - for index in range(4): - self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol, - self.PageRange[index][0], self.PageRange[index][1], - self.RegMonitorData) - - -#------------------------------------------------------------------------------- -# For Register Access Notebook (divide index range) -#------------------------------------------------------------------------------- -class RegisterNotebook(wx.Notebook): - def __init__(self, parent, controler): - """ - Constructor - @param parent: RegisterAccessPanel object - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Notebook.__init__(self, parent, id = -1) - - self.parent = parent - self.Controler = controler - - # Initialize pages - self.RegPage = [] - for iter in range(4): - self.RegPage.append(None) - - for index in range(4): - self.RegPage[index] = RegisterNotebookPanel(self, self.Controler, - parent.MainRow[index], parent.MainCol) - self.AddPage(self.RegPage[index], - "0x"+"{:0>4x}".format(index*1024)+" - 0x"+"{:0>4x}".format((index+1)*1024-1)) - - self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) - self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging) - - def OnPageChanged(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - def OnPageChanging(self, event): - old = event.GetOldSelection() - new = event.GetSelection() - sel = self.GetSelection() - event.Skip() - - -#------------------------------------------------------------------------------- -# For Register Access Notebook Panel -# (Main UI : including main, sub table) -#------------------------------------------------------------------------------- -class RegisterNotebookPanel(wx.Panel): - def __init__(self, parent, controler, row, col): - """ - Constructor - @param parent: RegisterAccessPanel object - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - @param row, col: size of the table - """ - wx.Panel.__init__(self, parent, -1) - - self.parent = parent - self.Controler = controler - self.Row = row - self.Col = col - sub_row = 0 - sub_col = 4 - - self.Sizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=30) - - self.MainTable = RegisterMainTable(self, self.Row, self.Col, self.Controler) - self.SubTable = RegisterSubTable(self, sub_row, sub_col) - - self.SubTable.CreateGrid(sub_row, sub_col) - self.SubTable.SetValue(self, []) - - self.Sizer.AddMany([self.MainTable, self.SubTable]) - - self.SetSizer(self.Sizer) - - def UpdateMainTable(self, row, col, low_index, high_index, data): - """ - Updates main table. - It's done by deleting the main table and creating it again. - @param row, col: size of the table - @param low_index: the lowest index of the page - @param high_index: the highest index of the page - @param data: data - """ - self.MainTable.Destroy() - self.MainTable = RegisterMainTable(self, row, col, self.Controler) - self.Sizer.Detach(self.SubTable) - self.Sizer.AddMany([self.MainTable, self.SubTable]) - self.SetSizer(self.Sizer) - self.MainTable.CreateGrid(row, col) - self.MainTable.SetValue(self, data, low_index, high_index) - self.MainTable.Update() - - def UpdateSubTable(self, row, col, data): - """ - Updates sub table. - It's done by deleting the sub table and creating it again. - @param row, col: size of the table - @param data: data - """ - self.SubTable.Destroy() - self.SubTable = RegisterSubTable(self, row, col) - self.Sizer.Detach(self.MainTable) - self.Sizer.AddMany([self.MainTable, self.SubTable]) - self.Sizer.Layout() - self.SetSizer(self.Sizer) - self.SubTable.CreateGrid(row, col) - self.SubTable.SetValue(self, data) - self.SubTable.Update() - - -#------------------------------------------------------------------------------- -# For Register Access Notebook Panel (Main Table) -#------------------------------------------------------------------------------- -class RegisterMainTable(wx.grid.Grid): - def __init__(self, parent, row, col, controler): - """ - Constructor - @param parent: RegisterNotebook object - @param row, col: size of the table - @param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - self.parent = parent - self.Data = {} - self.Row = row - self.Col = col - self.Controler = controler - self.RegisterAccessPanel = self.parent.parent.parent - - wx.grid.Grid.__init__(self, parent, -1, size=(820,300), - style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL) - - for evt, mapping_method in [(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell), - (gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell), - (gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnRegModifyDialog)]: - self.Bind(evt, mapping_method) - - def SetValue(self, parent, reg_monitor_data, low_index, high_index): - """ - Set the RegMonitorData into the main table. - @param parent: RegisterNotebook object - @param reg_monitor_data: data - @param low_index: the lowest index of the page - @param high_index: the highest index of the page - """ - self.RegMonitorData = reg_monitor_data - - # set label name and size - register_maintable_label = [(0, "Description"), (1, "Dec"), - (2, "Hex"), (3, "Char")] - - for (index, label) in register_maintable_label: - self.SetColLabelValue(index, label) - - self.SetColSize(0, 200) - - # if reg_monitor_data is 0, it is initialization of register access. - if reg_monitor_data == 0: - return 0 - - # set data into UI - row = col = 0 - for row_index in reg_monitor_data[low_index:high_index]: - col = 0 - self.SetRowLabelValue(row, row_index[0]) - for data_index in range(4): - self.SetCellValue(row, col, row_index[data_index+1]) - self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) - self.SetReadOnly(row, col, True) - col = col + 1 - row = row + 1 - - def OnSelectCell(self, event): - """ - Handles the event of the cell of the main table. - @param event: gridlib object (left click) - """ - # if reg_monitor_data is 0, it is initialization of register access. - if self.RegMonitorData == 0: - event.Skip() - return 0 - - sub_row = 0 - sub_col = 4 - - address = self.GetRowLabelValue(event.GetRow()) - - reg_sub_grid_data = [] - - BIT_RANGE, NAME, DESCRIPTIONS = range(3) - - # Check if this register's detail description is exist or not, - # and create data structure for the detail description table ; sub grid - if address in self.RegisterAccessPanel.RegisterSubGridDict: - for element in self.RegisterAccessPanel.RegisterSubGridDict[address]: - row_data =[] - row_data.append(element[BIT_RANGE]) - row_data.append(element[NAME]) - bin_data = "{:0>16b}".format(int(self.GetCellValue(event.GetRow(), 1))) - value_range = element[BIT_RANGE].split('-') - value = (bin_data[8:16][::-1]+bin_data[0:8][::-1])[int(value_range[0]):(int(value_range[-1])+1)][::-1] - row_data.append(str(int(('0b'+str(value)), 2))) - if value in element[DESCRIPTIONS]: - row_data.append(element[DESCRIPTIONS][value]) - else: - row_data.append('') - reg_sub_grid_data.append(row_data) - sub_row = sub_row + 1 - - self.parent.UpdateSubTable(sub_row, sub_col, reg_sub_grid_data) - # event.Skip() updates UI of selecting cell - event.Skip() - - def OnRegModifyDialog(self, event): - """ - Handle the event of the cell of the main table. - Display the window where the user modifies the value of the cell. - @param event: gridlib object (double click) - """ - # user can enter a value in case that user double-clicked 'Dec' or 'Hex' value. - if event.GetCol() == 1 or event.GetCol() == 2: - dlg = wx.TextEntryDialog(self, "Enter hex(0xnnnn) or dec(n) value", - "Register Modify Dialog", style = wx.OK|wx.CANCEL) - - # Setting value in initial dialog value - start_value = self.GetCellValue(event.GetRow(), event.GetCol()) - dlg.SetValue(start_value) - - if dlg.ShowModal() == wx.ID_OK: - try: - # It int(input) success, this input is dev or hex value. - # Otherwise, it's error, so it goes except. - int(dlg.GetValue(), 0) - - # reg_write - # ex) ethercat reg_write -p 0 -t uint16 0x0000 0x0000 - return_val = self.Controler.CommonMethod.RegWrite('0x'+self.GetRowLabelValue(event.GetRow()), dlg.GetValue()) - - if len(return_val)==0: - # set dec - self.SetCellValue(event.GetRow(), 1, str(int(dlg.GetValue(), 0))) - # set hex - hex_data = '0x'+"{:0>4x}".format(int(dlg.GetValue(), 0)) - self.SetCellValue(event.GetRow(), 2, hex_data) - # set char - char_data = "" - # If hex_data is been able to convert to ascii code, append ascii code. - for iter in range(2): - if int(hex_data[(iter+1)*2:(iter+2)*2], 16)>=32 and int(hex_data[(iter+1)*2:(iter+2)*2], 16)<=126: - char_data = char_data + chr(int(hex_data[(iter+1)*2:(iter+2)*2], 16)) - else: - char_data = char_data + "." - - self.SetCellValue(event.GetRow(), 3, char_data) - - else: - self.Controler.CommonMethod.CreateErrorDialog('You can\'t modify it. This register is read-only or it\'s not connected.') - - except ValueError: - self.Controler.CommonMethod.CreateErrorDialog('You entered wrong value. You can enter dec or hex value only.') - - -#------------------------------------------------------------------------------- -# For Register Access Notebook Panel (Sub Table) -#------------------------------------------------------------------------------- -class RegisterSubTable(wx.grid.Grid): - def __init__(self, parent, row, col): - """ - Constructor - @param parent: RegisterNotebook object - @param row, col: size of the table - """ - self.parent = parent - self.Data = {} - self.Row = row - self.Col = col - - wx.grid.Grid.__init__(self, parent, -1, size=(820,150), - style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL) - - def SetValue(self, parent, data): - """ - Set the data into the subtable. - @param parent: RegisterNotebook object - @param data: data - """ - # lset label name and size - Register_SubTable_Label = [(0, "Bits"), (1, "Name"), - (2, "Value"), (3, "Enum")] - - for (index, label) in Register_SubTable_Label: - self.SetColLabelValue(index, label) - - self.SetColSize(1, 200) - self.SetColSize(3, 200) - - # set data into table - row = col = 0 - for rowData in data: - col = 0 - for element in rowData: - self.SetCellValue(row, col, element) - self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) - self.SetReadOnly(row, col, True) - col = col + 1 - row = row + 1 - - -#------------------------------------------------------------------------------- -# For Master State Panel -#------------------------------------------------------------------------------- -class MasterStatePanelClass(wx.Panel): - def __init__(self, parent, controler): - """ - Constructor - @param parent: wx.ScrollWindow object - @Param controler: _EthercatSlaveCTN class in EthercatSlave.py - """ - wx.Panel.__init__(self, parent, -1, (0, 0), - size=wx.DefaultSize, style = wx.SUNKEN_BORDER) - self.Controler = controler - self.parent = parent - self.StaticBox = {} - self.StaticText = {} - self.TextCtrl = {} - - # ----------------------- Main Sizer and Update Button -------------------------------------------- - self.MasterStateSizer = {"main" : wx.BoxSizer(wx.VERTICAL)} - for key, attr in [ - ("innerMain", [1, 10, 2, 10]), - ("innerTopHalf", [2, 10, 1, 10]), - ("innerBottomHalf", [2, 10, 1, 10]), - ("innerMasterState", [2, 10, 3, 10]), - ("innerDeviceInfo", [4, 10, 3, 10]), - ("innerFrameInfo", [4, 10, 5, 10])]: - self.MasterStateSizer[key] = wx.FlexGridSizer(cols=attr[0], hgap=attr[1], rows=attr[2], vgap=attr[3]) - - - self.UpdateButton = wx.Button(self, label=_('Update')) - self.UpdateButton.Bind(wx.EVT_BUTTON, self.OnButtonClick) - - for key, label in [ - ('masterState', 'EtherCAT Master State'), - ('deviceInfo', 'Ethernet Network Card Information'), - ('frameInfo', 'Network Frame Information')]: - self.StaticBox[key] = wx.StaticBox(self, label=_(label)) - self.MasterStateSizer[key] = wx.StaticBoxSizer(self.StaticBox[key]) - - - # ----------------------- Master State ----------------------------------------------------------- - for key, label in [ - ('Phase', 'Phase:'), - ('Active', 'Active:'), - ('Slaves', 'Slave Count:')]: - self.StaticText[key] = wx.StaticText(self, label=_(label)) - self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) - self.MasterStateSizer['innerMasterState'].AddMany([self.StaticText[key], self.TextCtrl[key]]) - - self.MasterStateSizer['masterState'].AddSizer(self.MasterStateSizer['innerMasterState']) - - # ----------------------- Ethernet Network Card Information --------------------------------------- - for key, label in [ - ('Main', 'MAC Address:'), - ('Link', 'Link State:'), - ('Tx frames', 'Tx Frames:'), - ('Rx frames', 'Rx Frames:'), - ('Lost frames', 'Lost Frames:')]: - self.StaticText[key] = wx.StaticText(self, label=_(label)) - self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) - self.MasterStateSizer['innerDeviceInfo'].AddMany([self.StaticText[key], self.TextCtrl[key]]) - - self.MasterStateSizer['deviceInfo'].AddSizer(self.MasterStateSizer['innerDeviceInfo']) - - # ----------------------- Network Frame Information ----------------------------------------------- - for key, label in [ - ('Tx frame rate [1/s]', 'Tx Frame Rate [1/s]:'), - ('Rx frame rate [1/s]', 'Tx Rate [kByte/s]:'), - ('Loss rate [1/s]', 'Loss Rate [1/s]:'), - ('Frame loss [%]', 'Frame Loss [%]:')]: - self.StaticText[key] = wx.StaticText(self, label=_(label)) - self.MasterStateSizer['innerFrameInfo'].Add(self.StaticText[key]) - self.TextCtrl[key] = {} - for index in ['0', '1', '2']: - self.TextCtrl[key][index] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) - self.MasterStateSizer['innerFrameInfo'].Add(self.TextCtrl[key][index]) - - self.MasterStateSizer['frameInfo'].AddSizer(self.MasterStateSizer['innerFrameInfo']) - - # --------------------------------- Main Sizer ---------------------------------------------------- - for key, sub, in [ - ('innerTopHalf', [ - 'masterState', 'deviceInfo']), - ('innerBottomHalf', [ - 'frameInfo']), - ('innerMain', [ - 'innerTopHalf', 'innerBottomHalf'])]: - for key2 in sub: - self.MasterStateSizer[key].AddSizer(self.MasterStateSizer[key2]) - - self.MasterStateSizer['main'].AddSizer(self.UpdateButton) - self.MasterStateSizer['main'].AddSizer(self.MasterStateSizer['innerMain']) - - self.SetSizer(self.MasterStateSizer['main']) - - def OnButtonClick(self, event): - """ - Handle the event of the 'Update' button. - Update the data of the master state. - @param event: wx.EVT_BUTTON object - """ - if self.Controler.GetCTRoot()._connector is not None: - self.MasterState = self.Controler.CommonMethod.GetMasterState() - # Update each TextCtrl - if self.MasterState: - for key in self.TextCtrl: - if isinstance(self.TextCtrl[key], dict): - for index in self.TextCtrl[key]: - self.TextCtrl[key][index].SetValue(self.MasterState[key][int(index)]) - else: - self.TextCtrl[key].SetValue(self.MasterState[key][0]) - else : - self.Controler.CommonMethod.CreateErrorDialog('PLC not connected!') +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# This file is part of Beremiz +# +# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab., University of Seoul +# +# See COPYING file for copyrights details. + +from __future__ import absolute_import +import os +import string +from xml.dom import minidom + +import wx +import wx.grid +import wx.gizmos +import wx.lib.buttons + +# -------------------------------------------------------------------- +from controls import CustomGrid, CustomTable +from runtime import PlcStatus +# -------------------------------------------------------------------- + +# ------------ for register management --------------- + +from util.TranslationCatalogs import NoTranslate +# ------------------------------------------------------------- + + +# ----------------------------- For Sync Manager Table ----------------------------------- +def GetSyncManagersTableColnames(): + """ + Returns column names of SyncManager Table in Slave state panel. + """ + _ = NoTranslate + return ["#", _("Name"), _("Start Address"), _("Default Size"), _("Control Byte"), _("Enable")] + + +# ------------------------------------------------------------------------------- +# Sync Managers Table +# ------------------------------------------------------------------------------- +class SyncManagersTable(CustomTable): + def GetValue(self, row, col): + if row < self.GetNumberRows(): + if col == 0: + return row + return self.data[row].get(self.GetColLabelValue(col, False), "") + + +# ------------------------------------------------------------------------------- +# EtherCAT Management Treebook +# ------------------------------------------------------------------------------- +class EtherCATManagementTreebook(wx.Treebook): + def __init__(self, parent, controler, node_editor): + """ + Constructor + @param parent: Reference to the parent wx.ScrolledWindow object + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + @param node_editor: Reference to Beremiz frame + """ + wx.Treebook.__init__(self, parent, -1, size=wx.DefaultSize, style=wx.BK_DEFAULT) + self.parent = parent + self.Controler = controler + self.NodeEditor = node_editor + + self.EtherCATManagementClassObject = {} + + # fill EtherCAT Management Treebook + panels = [ + ("Slave State", SlaveStatePanelClass, []), + ("SDO Management", SDOPanelClass, []), + ("PDO Monitoring", PDOPanelClass, []), + ("ESC Management", EEPROMAccessPanel, [ + ("Smart View", SlaveSiiSmartView), + ("Hex View", HexView)]), + ("Register Access", RegisterAccessPanel, []) + ] + for pname, pclass, subs in panels: + self.AddPage(pclass(self, self.Controler), pname) + for spname, spclass in subs: + self.AddSubPage(spclass(self, self.Controler), spname) + + +# ------------------------------------------------------------------------------- +# For SlaveState Panel +# ------------------------------------------------------------------------------- +class SlaveStatePanelClass(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1, (0, 0), size=wx.DefaultSize, style=wx.SUNKEN_BORDER) + self.Controler = controler + self.parent = parent + + # initialize SlaveStatePanel UI dictionaries + self.StaticBoxDic = {} + self.StaticTextDic = {} + self.TextCtrlDic = {} + self.ButtonDic = {} + + # iniitalize BoxSizer and FlexGridSizer + self.SizerDic = { + "SlaveState_main_sizer": wx.BoxSizer(wx.VERTICAL), + "SlaveState_inner_main_sizer": wx.FlexGridSizer(cols=1, hgap=50, rows=3, vgap=10), + "SlaveInfosDetailsInnerSizer": wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10), + "SyncManagerInnerSizer": wx.FlexGridSizer(cols=1, hgap=5, rows=1, vgap=5), + "SlaveState_sizer": wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10), + "SlaveState_up_sizer": wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10), + "SlaveState_down_sizer": wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)} + + # initialize StaticBox and StaticBoxSizer + for box_name, box_label in [ + ("SlaveInfosDetailsBox", "Slave Informations"), + ("SyncManagerBox", "Sync Manager"), + ("SlaveStateBox", "Slave State Transition && Monitoring")]: + self.StaticBoxDic[box_name] = wx.StaticBox(self, label=_(box_label)) + self.SizerDic[box_name] = wx.StaticBoxSizer(self.StaticBoxDic[box_name]) + + for statictext_name, statictext_label, textctrl_name in [ + ("VendorLabel", "Vendor:", "vendor"), + ("ProductcodeLabel", "Product code:", "product_code"), + ("RevisionnumberLabel", "Slave Count:", "revision_number"), + ("PhysicsLabel", "Physics:", "physics")]: + self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label)) + self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) + self.SizerDic["SlaveInfosDetailsInnerSizer"].AddMany([self.StaticTextDic[statictext_name], + self.TextCtrlDic[textctrl_name]]) + + self.SizerDic["SlaveInfosDetailsBox"].AddSizer(self.SizerDic["SlaveInfosDetailsInnerSizer"]) + + self.SyncManagersGrid = CustomGrid(self, size=wx.Size(605, 155), style=wx.VSCROLL) + + self.SizerDic["SyncManagerInnerSizer"].Add(self.SyncManagersGrid) + self.SizerDic["SyncManagerBox"].Add(self.SizerDic["SyncManagerInnerSizer"]) + + buttons = [ + ("InitButton", 0, "INIT", "State Transition to \"Init\" State", self.OnButtonClick, []), + ("PreOPButton", 1, "PREOP", "State Transition to \"PreOP\" State", self.OnButtonClick, [ + ("TargetStateLabel", "Target State:", "TargetState")]), + ("SafeOPButton", 2, "SAFEOP", "State Transition to \"SafeOP\" State", self.OnButtonClick, []), + ("OPButton", 3, "OP", "State Transition to \"OP\" State", self.OnButtonClick, [ + ("CurrentStateLabel", "Current State:", "CurrentState")]) + ] + for button_name, button_id, button_label, button_tooltipstring, event_method, sub_item in buttons: + self.ButtonDic[button_name] = wx.Button(self, id=button_id, label=_(button_label)) + self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method) + self.ButtonDic[button_name].SetToolTipString(button_tooltipstring) + self.SizerDic["SlaveState_up_sizer"].Add(self.ButtonDic[button_name]) + for statictext_name, statictext_label, textctrl_name in sub_item: + self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label)) + self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.DefaultSize, style=wx.TE_READONLY) + self.SizerDic["SlaveState_up_sizer"].AddMany([self.StaticTextDic[statictext_name], + self.TextCtrlDic[textctrl_name]]) + + for button_name, button_label, button_tooltipstring, event_method in [ + ("StartTimerButton", "Start State Monitoring", "Slave State Update Restart", self.StartTimer), + ("StopTimerButton", "Stop State Monitoring", "Slave State Update Stop", self.CurrentStateThreadStop)]: + self.ButtonDic[button_name] = wx.Button(self, label=_(button_label)) + self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method) + self.ButtonDic[button_name].SetToolTipString(button_tooltipstring) + self.SizerDic["SlaveState_down_sizer"].Add(self.ButtonDic[button_name]) + + self.SizerDic["SlaveState_sizer"].AddMany([self.SizerDic["SlaveState_up_sizer"], + self.SizerDic["SlaveState_down_sizer"]]) + + self.SizerDic["SlaveStateBox"].Add(self.SizerDic["SlaveState_sizer"]) + + self.SizerDic["SlaveState_inner_main_sizer"].AddMany([ + self.SizerDic["SlaveInfosDetailsBox"], self.SizerDic["SyncManagerBox"], + self.SizerDic["SlaveStateBox"]]) + + self.SizerDic["SlaveState_main_sizer"].Add(self.SizerDic["SlaveState_inner_main_sizer"]) + + self.SetSizer(self.SizerDic["SlaveState_main_sizer"]) + + # register a timer for periodic exectuion of slave state update (period: 1000 ms) + self.Bind(wx.EVT_TIMER, self.GetCurrentState) + + self.CreateSyncManagerTable() + + self.Centre() + + def CreateSyncManagerTable(self): + """ + Create grid for "SyncManager" + """ + # declare Table object + self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames()) + self.SyncManagersGrid.SetTable(self.SyncManagersTable) + # set grid alignment attr. (CENTER) + self.SyncManagersGridColAlignements = [wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, + wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE] + # set grid size + self.SyncManagersGridColSizes = [40, 150, 100, 100, 100, 100] + self.SyncManagersGrid.SetRowLabelSize(0) + for col in range(self.SyncManagersTable.GetNumberCols()): + attr = wx.grid.GridCellAttr() + attr.SetAlignment(self.SyncManagersGridColAlignements[col], wx.ALIGN_CENTRE) + self.SyncManagersGrid.SetColAttr(col, attr) + self.SyncManagersGrid.SetColMinimalWidth(col, self.SyncManagersGridColSizes[col]) + self.SyncManagersGrid.AutoSizeColumn(col, False) + + self.RefreshSlaveInfos() + + def RefreshSlaveInfos(self): + """ + Fill data in "Slave Information" and "SyncManager" + """ + slave_infos = self.Controler.GetSlaveInfos() + sync_manager_section = ["vendor", "product_code", "revision_number", "physics"] + if slave_infos is not None: + # this method is same as "TextCtrl.SetValue" + for textctrl_name in sync_manager_section: + self.TextCtrlDic[textctrl_name].SetValue(slave_infos[textctrl_name]) + self.SyncManagersTable.SetData(slave_infos["sync_managers"]) + self.SyncManagersTable.ResetView(self.SyncManagersGrid) + else: + for textctrl_name in sync_manager_section: + self.TextCtrlDic[textctrl_name].SetValue("") + self.SyncManagersTable.SetData([]) + self.SyncManagersTable.ResetView(self.SyncManagersGrid) + + def OnButtonClick(self, event): + """ + Event handler for slave state transition button click (Init, PreOP, SafeOP, OP button) + @param event : wx.EVT_BUTTON object + """ + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + state_dic = ["INIT", "PREOP", "SAFEOP", "OP"] + + # If target state is one of {INIT, PREOP, SAFEOP}, request slave state transition immediately. + if event.GetId() < 3: + self.Controler.CommonMethod.RequestSlaveState(state_dic[event.GetId()]) + self.TextCtrlDic["TargetState"].SetValue(state_dic[event.GetId()]) + + # If target state is OP, first check "PLC status". + # (1) If current PLC status is "Started", then request slave state transition + # (2) Otherwise, show error message and return + else: + status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus() + if status == PlcStatus.Started: + self.Controler.CommonMethod.RequestSlaveState("OP") + self.TextCtrlDic["TargetState"].SetValue("OP") + else: + self.Controler.CommonMethod.CreateErrorDialog(_("PLC is Not Started")) + + def GetCurrentState(self, event): + """ + Timer event handler for periodic slave state monitoring (Default period: 1 sec = 1000 msec). + @param event : wx.TIMER object + """ + check_connect_flag = self.Controler.CommonMethod.CheckConnect(True) + if check_connect_flag: + returnVal = self.Controler.CommonMethod.GetSlaveStateFromSlave() + line = returnVal.split("\n") + try: + self.SetCurrentState(line[self.Controler.GetSlavePos()]) + except Exception: + pass + + def SetCurrentState(self, line): + """ + Show current slave state using the executiob result of "ethercat slaves" command. + @param line : result of "ethercat slaves" command + """ + state_array = ["INIT", "PREOP", "SAFEOP", "OP"] + try: + # parse the execution result of "ethercat slaves" command + # Result example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100) + token = line.split(" ") + if token[2] in state_array: + self.TextCtrlDic["CurrentState"].SetValue(token[2]) + except Exception: + pass + + def StartTimer(self, event): + """ + Event handler for "Start State Monitoring" button. + - start slave state monitoring thread + @param event : wx.EVT_BUTTON object + """ + self.SlaveStateThread = wx.Timer(self) + # set timer period (1000 ms) + self.SlaveStateThread.Start(1000) + + def CurrentStateThreadStop(self, event): + """ + Event handler for "Stop State Monitoring" button. + - stop slave state monitoring thread + @param event : wx.EVT_BUTTON object + """ + try: + self.SlaveStateThread.Stop() + except Exception: + pass + + +# ------------------------------------------------------------------------------- +# For SDO Management Panel +# ------------------------------------------------------------------------------- +class SDOPanelClass(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1) + + self.DatatypeDescription, self.CommunicationObject, self.ManufacturerSpecific, \ + self.ProfileSpecific, self.Reserved, self.AllSDOData = range(6) + + self.Controler = controler + + self.SDOManagementMainSizer = wx.BoxSizer(wx.VERTICAL) + self.SDOManagementInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10) + + self.SDOUpdate = wx.Button(self, label=_('update')) + self.SDOUpdate.Bind(wx.EVT_BUTTON, self.SDOInfoUpdate) + + self.CallSDONoteBook = SDONoteBook(self, controler=self.Controler) + self.SDOManagementInnerMainSizer.Add(self.SDOUpdate) + self.SDOManagementInnerMainSizer.Add(self.CallSDONoteBook, wx.ALL | wx.EXPAND) + + self.SDOManagementMainSizer.Add(self.SDOManagementInnerMainSizer) + + self.SetSizer(self.SDOManagementMainSizer) + + def SDOInfoUpdate(self, event): + """ + Evenet handler for SDO "update" button. + - Load SDO data from current slave + @param event : wx.EVT_BUTTON object + """ + self.Controler.CommonMethod.SaveSDOData = [] + self.Controler.CommonMethod.ClearSDODataSet() + self.SDOFlag = False + + # Check whether beremiz connected or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + self.SDOs = self.Controler.CommonMethod.GetSlaveSDOFromSlave() + # SDOFlag is "False", user click "Cancel" button + self.SDOFlag = self.SDOParser() + + if self.SDOFlag: + self.CallSDONoteBook.CreateNoteBook() + self.Refresh() + + def SDOParser(self): + """ + Parse SDO data set that obtain "SDOInfoUpdate" Method + @return True or False + """ + + slaveSDO_progress = wx.ProgressDialog(_("Slave SDO Monitoring"), _("Now Uploading..."), + maximum=len(self.SDOs.splitlines()), + parent=self, + style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | + wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME | + wx.PD_AUTO_HIDE | wx.PD_SMOOTH) + + # If keep_going flag is False, SDOParser method is stop and return "False". + keep_going = True + count = 0 + + # SDO data example + # SDO 0x1000, "Device type" + # 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474 + for details_line in self.SDOs.splitlines(): + count += 1 + line_token = details_line.split("\"") + # len(line_token[2]) case : SDO 0x1000, "Device type" + if len(line_token[2]) == 0: + title_name = line_token[1] + # else case : 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474 + else: + # line_token = ['0x1000:00,r-r-r-,uint32,32 bit,', 'Device type', ',0x00020192, 131474'] + token_head, name, token_tail = line_token + + # token_head = ['0x1000:00', 'r-r-r-', 'uint32', '32 bit', ''] + token_head = token_head.split(",") + ful_idx, access, type, size, _empty = token_head + # ful_idx.split(":") = ['0x1000', '00'] + idx, sub_idx = ful_idx.split(":") + + # token_tail = ['', '0x00020192', '131474'] + token_tail = token_tail.split(",") + try: + _empty, hex_val, _dec_val = token_tail + + # SDO data is not return "dec value" + # line example : + # 0x1702:01,rwr-r-,uint32,32 bit," 1st mapping", ---- + except Exception: + _empty, hex_val = token_tail + + name_after_check = self.StringTest(name) + + # convert hex type + sub_idx = "0x" + sub_idx + + if type == "octet_string": + hex_val = ' ---- ' + + # SResult of SlaveSDO data parsing. (data type : dictionary) + self.Data = {'idx': idx.strip(), 'subIdx': sub_idx.strip(), 'access': access.strip(), + 'type': type.strip(), 'size': size.strip(), 'name': name_after_check.strip("\""), + 'value': hex_val.strip(), "category": title_name.strip("\"")} + + category_divide_value = [0x1000, 0x2000, 0x6000, 0xa000, 0xffff] + + for count in range(len(category_divide_value)): + if int(idx, 0) < category_divide_value[count]: + self.Controler.CommonMethod.SaveSDOData[count].append(self.Data) + break + + self.Controler.CommonMethod.SaveSDOData[self.AllSDOData].append(self.Data) + + if count >= len(self.SDOs.splitlines()) / 2: + (keep_going, _skip) = slaveSDO_progress.Update(count, "Please waiting a moment!!") + else: + (keep_going, _skip) = slaveSDO_progress.Update(count) + + # If user click "Cancel" loop suspend immediately + if not keep_going: + break + + slaveSDO_progress.Destroy() + return keep_going + + def StringTest(self, check_string): + """ + Test value 'name' is alphanumeric + @param check_string : input data for check + @return result : output data after check + """ + # string.printable is print this result + # '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ + # !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c + allow_range = string.printable + result = check_string + for i in range(0, len(check_string)): + # string.isalnum() is check whether string is alphanumeric or not + if check_string[len(check_string)-1-i:len(check_string)-i] in allow_range: + result = check_string[:len(check_string) - i] + break + return result + + +# ------------------------------------------------------------------------------- +# For SDO Notebook (divide category) +# ------------------------------------------------------------------------------- +class SDONoteBook(wx.Notebook): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent SDOPanelClass class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Notebook.__init__(self, parent, id=-1, size=(850, 500)) + self.Controler = controler + self.parent = parent + + self.CreateNoteBook() + + def CreateNoteBook(self): + """ + Create each NoteBook page, divided SDO index + According to EtherCAT Communication(03/2011), 158p + """ + self.Data = [] + count = 1 + + page_texts = [("all", self.parent.AllSDOData), + ("0x0000 - 0x0ff", self.parent.DatatypeDescription), + ("0x1000 - 0x1fff", self.parent.CommunicationObject), + ("0x2000 - 0x5fff", self.parent.ManufacturerSpecific), + ("0x6000 - 0x9fff", self.parent.ProfileSpecific), + ("0xa000 - 0xffff", self.parent.Reserved)] + + # page_tooltip_string = ["SDO Index 0x0000 - 0x0fff : Data Type Description", + # "SDO Index 0x1000 - 0x1fff : Communication object", + # "SDO Index 0x2000 - 0x5fff : Manufacturer specific", + # "SDO Index 0x6000 - 0x9fff : Profile specific", + # "SDO Index 0xa000 - 0xffff : Reserved", + # "All SDO Object"] + + self.DeleteAllPages() + + for txt, count in page_texts: + self.Data = self.Controler.CommonMethod.SaveSDOData[count] + self.Win = SlaveSDOTable(self, self.Data) + self.AddPage(self.Win, txt) + + +# ------------------------------------------------------------------------------- +# For SDO Grid (fill index, subindex, etc...) +# ------------------------------------------------------------------------------- +class SlaveSDOTable(wx.grid.Grid): + def __init__(self, parent, data): + """ + Constructor + @param parent: Reference to the parent SDOPanelClass class + @param data: SDO data after parsing "SDOParser" method + """ + wx.grid.Grid.__init__(self, parent, -1, size=(830, 490), + style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL) + + self.Controler = parent.Controler + self.parent = parent + self.SDOFlag = True + if data is None: + self.SDOs = [] + else: + self.SDOs = data + + self.CreateGrid(len(self.SDOs), 8) + SDOCellSize = [(0, 65), (1, 65), (2, 50), (3, 55), + (4, 40), (5, 200), (6, 250), (7, 85)] + + for (index, size) in SDOCellSize: + self.SetColSize(index, size) + + self.SetRowLabelSize(0) + + SDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Access"), + (3, "Type"), (4, "Size"), (5, "Category"), + (6, "Name"), (7, "Value")] + + for (index, label) in SDOTableLabel: + self.SetColLabelValue(index, label) + self.SetColLabelAlignment(index, wx.ALIGN_CENTRE) + + attr = wx.grid.GridCellAttr() + + # for SDO download + self.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.SDOModifyDialog) + + for i in range(7): + self.SetColAttr(i, attr) + + self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER) + + self.SetTableValue() + + def SetTableValue(self): + """ + Cell is filled by new parsing data + """ + sdo_list = ['idx', 'subIdx', 'access', 'type', 'size', 'category', 'name', 'value'] + for row_idx in range(len(self.SDOs)): + for col_idx in range(len(self.SDOs[row_idx])): + self.SetCellValue(row_idx, col_idx, self.SDOs[row_idx][sdo_list[col_idx]]) + self.SetReadOnly(row_idx, col_idx, True) + if col_idx < 5: + self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) + + def CheckSDODataAccess(self, row): + """ + CheckSDODataAccess method is checking that access data has "w" + Access field consist 6 char, if mean + rw rw rw + (preop) (safeop) (op) + Example Access field : rwrwrw, rwrw-- + @param row : Selected cell by user + @return Write_flag : If data has "w", flag is true + """ + write_flag = False + check = self.SDOs[row]['access'] + if check[1:2] == 'w': + self.Controler.CommonMethod.Check_PREOP = True + write_flag = True + if check[3:4] == 'w': + self.Controler.CommonMethod.Check_SAFEOP = True + write_flag = True + if check[5:] == 'w': + self.Controler.CommonMethod.Check_OP = True + write_flag = True + + return write_flag + + def DecideSDODownload(self, state): + """ + compare current state and "access" field, + result notify SDOModifyDialog method + @param state : current slave state + @return True or False + """ + # Example of 'state' parameter : "0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)" + state = state[self.Controler.GetSlavePos()].split(" ")[2] + if state == "PREOP" and self.Controler.CommonMethod.Check_PREOP: + return True + elif state == "SAFEOP" and self.Controler.CommonMethod.Check_SAFEOP: + return True + elif state == "OP" and self.Controler.CommonMethod.Check_OP: + return True + + return False + + def ClearStateFlag(self): + """ + Initialize StateFlag + StateFlag is notice SDOData access each slave state + """ + self.Controler.CommonMethod.Check_PREOP = False + self.Controler.CommonMethod.Check_SAFEOP = False + self.Controler.CommonMethod.Check_OP = False + + def SDOModifyDialog(self, event): + """ + Create dialog for SDO value modify + if user enter data, perform command "ethercat download" + @param event : wx.grid.EVT_GRID_CELL_LEFT_DCLICK object + """ + self.ClearStateFlag() + + # CheckSDODataAccess is checking that OD(Object Dictionary) has "w" + if event.GetCol() == 7 and self.CheckSDODataAccess(event.GetRow()): + dlg = wx.TextEntryDialog( + self, + _("Enter hex or dec value (if enter dec value, it automatically conversed hex value)"), + "SDOModifyDialog", + style=wx.OK | wx.CANCEL) + + start_value = self.GetCellValue(event.GetRow(), event.GetCol()) + dlg.SetValue(start_value) + + if dlg.ShowModal() == wx.ID_OK: + try: + int(dlg.GetValue(), 0) + # check "Access" field + if self.DecideSDODownload(self.Controler.CommonMethod.SlaveState[self.Controler.GetSlavePos()]): + # Request "SDODownload" + self.Controler.CommonMethod.SDODownload( + self.SDOs[event.GetRow()]['type'], + self.SDOs[event.GetRow()]['idx'], + self.SDOs[event.GetRow()]['subIdx'], + dlg.GetValue()) + + self.SetCellValue(event.GetRow(), event.GetCol(), hex(int(dlg.GetValue(), 0))) + else: + self.Controler.CommonMethod.CreateErrorDialog(_('You cannot SDO download this state')) + # Error occured process of "int(variable)" + # User input is not hex, dec value + except ValueError: + self.Controler.CommonMethod.CreateErrorDialog(_('You can input only hex, dec value')) + + +# ------------------------------------------------------------------------------- +# For PDO Monitoring Panel +# PDO Class UI : Panel -> Choicebook (RxPDO, TxPDO) -> +# Notebook (PDO Index) -> Grid (PDO entry) +# ------------------------------------------------------------------------------- +class PDOPanelClass(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1) + self.Controler = controler + + self.PDOMonitoringEditorMainSizer = wx.BoxSizer(wx.VERTICAL) + self.PDOMonitoringEditorInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10) + + self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler) + self.PDOMonitoringEditorInnerMainSizer.Add(self.CallPDOChoicebook, wx.ALL) + + self.PDOMonitoringEditorMainSizer.Add(self.PDOMonitoringEditorInnerMainSizer) + + self.SetSizer(self.PDOMonitoringEditorMainSizer) + + def PDOInfoUpdate(self): + """ + Call RequestPDOInfo method and create Choicebook + """ + self.Controler.CommonMethod.RequestPDOInfo() + self.CallPDOChoicebook.Destroy() + self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler) + self.Refresh() + + +# ------------------------------------------------------------------------------- +# For PDO Choicebook (divide Tx, Rx PDO) +# ------------------------------------------------------------------------------- +class PDOChoicebook(wx.Choicebook): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent PDOPanelClass class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Choicebook.__init__(self, parent, id=-1, size=(500, 500), style=wx.CHB_DEFAULT) + self.Controler = controler + + RxWin = PDONoteBook(self, controler=self.Controler, name="Rx") + TxWin = PDONoteBook(self, controler=self.Controler, name="Tx") + self.AddPage(RxWin, "RxPDO") + self.AddPage(TxWin, "TxPDO") + + +# ------------------------------------------------------------------------------- +# For PDO Notebook (divide PDO index) +# ------------------------------------------------------------------------------- +class PDONoteBook(wx.Notebook): + def __init__(self, parent, name, controler): + """ + Constructor + @param parent: Reference to the parent PDOChoicebook class + @param name: identifier whether RxPDO or TxPDO + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Notebook.__init__(self, parent, id=-1, size=(640, 400)) + self.Controler = controler + + count = 0 + page_texts = [] + + self.Controler.CommonMethod.RequestPDOInfo() + + if name == "Tx": + # obtain pdo_info and pdo_entry + # pdo_info include (PDO index, name, number of entry) + pdo_info = self.Controler.CommonMethod.GetTxPDOCategory() + pdo_entry = self.Controler.CommonMethod.GetTxPDOInfo() + for tmp in pdo_info: + title = str(hex(tmp['pdo_index'])) + page_texts.append(title) + # RX PDO case + else: + pdo_info = self.Controler.CommonMethod.GetRxPDOCategory() + pdo_entry = self.Controler.CommonMethod.GetRxPDOInfo() + for tmp in pdo_info: + title = str(hex(tmp['pdo_index'])) + page_texts.append(title) + + # Add page depending on the number of pdo_info + for txt in page_texts: + win = PDOEntryTable(self, pdo_info, pdo_entry, count) + self.AddPage(win, txt) + count += 1 + + +# ------------------------------------------------------------------------------- +# For PDO Grid (fill entry index, subindex etc...) +# ------------------------------------------------------------------------------- +class PDOEntryTable(wx.grid.Grid): + def __init__(self, parent, info, entry, count): + """ + Constructor + @param parent: Reference to the parent PDONoteBook class + @param info : data structure including entry index, sub index, name, length, type + @param entry : data structure including index, name, entry number + @param count : page number + """ + wx.grid.Grid.__init__(self, parent, -1, size=(500, 400), pos=wx.Point(0, 0), + style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL) + + self.Controler = parent.Controler + + self.PDOInfo = info + self.PDOEntry = entry + self.Count = count + + self.CreateGrid(self.PDOInfo[self.Count]['number_of_entry'], 5) + self.SetColLabelSize(25) + self.SetRowLabelSize(0) + + PDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Length"), + (3, "Type"), (4, "Name")] + + for (index, label) in PDOTableLabel: + self.SetColLabelValue(index, label) + + PDOCellSize = [(0, 45), (1, 65), (2, 55), (3, 40), (4, 300)] + + for (index, size) in PDOCellSize: + self.SetColSize(index, size) + self.SetColLabelAlignment(index, wx.ALIGN_LEFT) + + attr = wx.grid.GridCellAttr() + + for i in range(5): + self.SetColAttr(i, attr) + + self.SetTableValue() + + def SetTableValue(self): + """ + Cell is filled by new parsing data in XML + """ + list_index = 0 + # number of entry + for i in range(self.Count + 1): + list_index += self.PDOInfo[i]['number_of_entry'] + + start_value = list_index - self.PDOInfo[self.Count]['number_of_entry'] + + pdo_list = ['entry_index', 'subindex', 'bitlen', 'type', 'name'] + for row_idx in range(self.PDOInfo[self.Count]['number_of_entry']): + for col_idx in range(len(self.PDOEntry[row_idx])): + # entry index is converted hex value. + if col_idx == 0: + self.SetCellValue(row_idx, col_idx, hex(self.PDOEntry[start_value][pdo_list[col_idx]])) + else: + self.SetCellValue(row_idx, col_idx, str(self.PDOEntry[start_value][pdo_list[col_idx]])) + if col_idx != 4: + self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) + else: + self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_LEFT, wx.ALIGN_CENTRE) + self.SetReadOnly(row_idx, col_idx, True) + self.SetRowSize(row_idx, 25) + start_value += 1 + + +# ------------------------------------------------------------------------------- +# For EEPROM Access Main Panel +# (This class explain EEPROM Access) +# ------------------------------------------------------------------------------- +class EEPROMAccessPanel(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1) + sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=3, vgap=20) + + line = wx.StaticText(self, -1, "\n EEPROM Access is composed to SmartView and HexView. \ + \n\n - SmartView shows Config Data, Device Identity, Mailbox settings, etc. \ + \n\n - HexView shows EEPROM's contents.") + + sizer.Add(line) + + self.SetSizer(sizer) + + +# ------------------------------------------------------------------------------- +# For Smart View Panel +# ------------------------------------------------------------------------------- +class SlaveSiiSmartView(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1) + self.parent = parent + self.Controler = controler + + self.PDIType = { + 0: ['none', '00000000'], + 4: ['Digital I/O', '00000100'], + 5: ['SPI Slave', '00000101'], + 7: ['EtherCAT Bridge (port3)', '00000111'], + 8: ['uC async. 16bit', '00001000'], + 9: ['uC async. 8bit', '00001001'], + 10: ['uC sync. 16bit', '00001010'], + 11: ['uC sync. 8bit', '00001011'], + 16: ['32 Digtal Input and 0 Digital Output', '00010000'], + 17: ['24 Digtal Input and 8 Digital Output', '00010001'], + 18: ['16 Digtal Input and 16 Digital Output', '00010010'], + 19: ['8 Digtal Input and 24 Digital Output', '00010011'], + 20: ['0 Digtal Input and 32 Digital Output', '00010100'], + 128: ['On-chip bus', '11111111'] + } + + sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=2, vgap=5) + button_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=5) + + for button, mapping_method in [("Write EEPROM", self.WriteToEEPROM), + ("Read EEPROM", self.ReadFromEEPROM)]: + btn = wx.Button(self, -1, button, size=(150, 40)) + button_sizer.Add(btn, border=10, flag=wx.ALL) + btn.Bind(wx.EVT_BUTTON, mapping_method) + + self.TreeListCtrl = SmartViewTreeListCtrl(self, self.Controler) + + sizer.Add(button_sizer, border=10, flag=wx.ALL) + sizer.Add(self.TreeListCtrl, border=10, flag=wx.ALL) + self.SetSizer(sizer) + + self.Create_SmartView() + + def Create_SmartView(self): + """ + SmartView shows information based on XML as initial value. + """ + self.Controler.CommonMethod.SmartViewInfosFromXML = self.Controler.CommonMethod.GetSmartViewInfos() + self.SetXMLData() + + def WriteToEEPROM(self, event): + """ + Open binary file (user select) and write the selected binary data to EEPROM + @param event : wx.EVT_BUTTON object + """ + # Check whether beremiz connected or not, and whether status is "Started" or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus() + if status is not PlcStatus.Started: + dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", _("bin files (*.bin)|*.bin"), wx.OPEN) + + if dialog.ShowModal() == wx.ID_OK: + filepath = dialog.GetPath() + try: + binfile = open(filepath, "rb") + self.SiiBinary = binfile.read() + dialog.Destroy() + + self.Controler.CommonMethod.SiiWrite(self.SiiBinary) + # refresh data structure kept by master + self.Controler.CommonMethod.Rescan() + # save binary data as inner global data of beremiz + # for fast loading when slave plugin node is reopened. + self.Controler.CommonMethod.SiiData = self.SiiBinary + self.SetEEPROMData() + except Exception: + self.Controler.CommonMethod.CreateErrorDialog(_('The file does not exist!')) + dialog.Destroy() + + def ReadFromEEPROM(self, event): + """ + Refresh displayed data based on slave EEPROM and save binary file through dialog + @param event : wx.EVT_BUTTON object + """ + # Check whether beremiz connected or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + self.SiiBinary = self.Controler.CommonMethod.LoadData() + self.SetEEPROMData() + dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), + "slave0.bin", _("bin files (*.bin)|*.bin|All files|*.*"), + wx.SAVE | wx.OVERWRITE_PROMPT) + + if dialog.ShowModal() == wx.ID_OK: + filepath = dialog.GetPath() + binfile = open(filepath, "wb") + binfile.write(self.SiiBinary) + binfile.close() + + dialog.Destroy() + + def SetXMLData(self): + """ + Set data based on XML initially + """ + # Config Data: EEPROM Size, PDI Type, Device Emulation + # Find PDI Type in pdiType dictionary + cnt_pdi_type = self.Controler.CommonMethod.SmartViewInfosFromXML["pdi_type"] + for i in self.PDIType.keys(): + if cnt_pdi_type == i: + cnt_pdi_type = self.PDIType[i][0] + break + # Set Config Data + for treelist, data in [("EEPROM Size (Bytes)", + str(self.Controler.CommonMethod.SmartViewInfosFromXML["eeprom_size"])), + ("PDI Type", + cnt_pdi_type), + ("Device Emulation", + self.Controler.CommonMethod.SmartViewInfosFromXML["device_emulation"])]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1) + + # Device Identity: Vendor ID, Product Code, Revision No., Serial No. + # Set Device Identity + for treelist, data in [("Vendor ID", self.Controler.CommonMethod.SmartViewInfosFromXML["vendor_id"]), + ("Product Code", self.Controler.CommonMethod.SmartViewInfosFromXML["product_code"]), + ("Revision No.", self.Controler.CommonMethod.SmartViewInfosFromXML["revision_no"]), + ("Serial No.", self.Controler.CommonMethod.SmartViewInfosFromXML["serial_no"])]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1) + + # Mailbox: Supported Mailbox, Bootstrap Configuration, Standard Configuration + # Set Mailbox + for treelist, data in [("Supported Mailbox", self.Controler.CommonMethod.SmartViewInfosFromXML["supported_mailbox"]), + ("Bootstrap Configuration", ""), + ("Standard Configuration", "")]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1) + # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size + for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outstart"]), + ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outlength"]), + ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_instart"]), + ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_inlength"])]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1) + # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size + for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outstart"]), + ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outlength"]), + ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_instart"]), + ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_inlength"])]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1) + + def SetEEPROMData(self): + """ + Set data based on slave EEPROM. + """ + # sii_dict = { Parameter : (WordAddress, WordSize) } + sii_dict = { + 'PDIControl': ('0', 1), + 'PDIConfiguration': ('1', 1), + 'PulseLengthOfSYNCSignals': ('2', 1), + 'ExtendedPDIConfiguration': ('3', 1), + 'ConfiguredStationAlias': ('4', 1), + 'Checksum': ('7', 1), + 'VendorID': ('8', 2), + 'ProductCode': ('a', 2), + 'RevisionNumber': ('c', 2), + 'SerialNumber': ('e', 2), + 'Execution Delay': ('10', 1), + 'Port0Delay': ('11', 1), + 'Port1Delay': ('12', 1), + 'BootstrapReceiveMailboxOffset': ('14', 1), + 'BootstrapReceiveMailboxSize': ('15', 1), + 'BootstrapSendMailboxOffset': ('16', 1), + 'BootstrapSendMailboxSize': ('17', 1), + 'StandardReceiveMailboxOffset': ('18', 1), + 'StandardReceiveMailboxSize': ('19', 1), + 'StandardSendMailboxOffset': ('1a', 1), + 'StandardSendMailboxSize': ('1b', 1), + 'MailboxProtocol': ('1c', 1), + 'Size': ('3e', 1), + 'Version': ('3f', 1), + 'First Category Type/Vendor Specific': ('40', 1), + 'Following Category Word Size': ('41', 1), + 'Category Data': ('42', 1), + } + + # Config Data: EEPROM Size, PDI Type, Device Emulation + # EEPROM's data in address '0x003f' is Size of EEPROM in KBit-1 + eeprom_size = str((int(self.GetWordAddressData(sii_dict.get('Size'), 10))+1)/8*1024) + # Find PDI Type in pdiType dictionary + cnt_pdi_type = int(self.GetWordAddressData(sii_dict.get('PDIControl'), 16).split('x')[1][2:4], 16) + for i in self.PDIType.keys(): + if cnt_pdi_type == i: + cnt_pdi_type = self.PDIType[i][0] + break + # Get Device Emulation + device_emulation = str(bool(int("{:0>16b}".format(int(self.GetWordAddressData(sii_dict.get('PDIControl'), 16), 16))[7]))) + # Set Config Data + for treelist, data in [("EEPROM Size (Bytes)", eeprom_size), + ("PDI Type", cnt_pdi_type), + ("Device Emulation", device_emulation)]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1) + + # Device Identity: Vendor ID, Product Code, Revision No., Serial No. + # Set Device Identity + for treelist, data in [ + ("Vendor ID", self.GetWordAddressData(sii_dict.get('VendorID'), 16)), + ("Product Code", self.GetWordAddressData(sii_dict.get('ProductCode'), 16)), + ("Revision No.", self.GetWordAddressData(sii_dict.get('RevisionNumber'), 16)), + ("Serial No.", self.GetWordAddressData(sii_dict.get('SerialNumber'), 16))]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1) + + # Mailbox + # EEORPOM's word address '1c' indicates supported mailbox protocol. + # each value of mailbox protocol : + # VoE(0x0020), SoE(0x0010), FoE(0x0008), CoE(0x0004), EoE(0x0002), AoE(0x0001) + supported_mailbox = "" + mailbox_protocol = ["VoE, ", "SoE, ", "FoE, ", "CoE, ", "EoE, ", "AoE, "] + mailbox_data = "{:0>8b}".format(int(self.GetWordAddressData(sii_dict.get('MailboxProtocol'), 16), 16)) + for protocol in range(6): + if mailbox_data[protocol+2] == '1': + supported_mailbox += mailbox_protocol[protocol] + supported_mailbox = supported_mailbox.strip(", ") + # Set Mailbox + for treelist, data in [("Supported Mailbox", supported_mailbox), + ("Bootstrap Configuration", ""), + ("Standard Configuration", "")]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1) + # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size + for treelist, data in [ + ("Receive Offset", self.GetWordAddressData(sii_dict.get('BootstrapReceiveMailboxOffset'), 10)), + ("Receive Size", self.GetWordAddressData(sii_dict.get('BootstrapReceiveMailboxSize'), 10)), + ("Send Offset", self.GetWordAddressData(sii_dict.get('BootstrapSendMailboxOffset'), 10)), + ("Send Size", self.GetWordAddressData(sii_dict.get('BootstrapSendMailboxSize'), 10))]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1) + # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size + for treelist, data in [ + ("Receive Offset", self.GetWordAddressData(sii_dict.get('StandardReceiveMailboxOffset'), 10)), + ("Receive Size", self.GetWordAddressData(sii_dict.get('StandardReceiveMailboxSize'), 10)), + ("Send Offset", self.GetWordAddressData(sii_dict.get('StandardSendMailboxOffset'), 10)), + ("Send Size", self.GetWordAddressData(sii_dict.get('StandardSendMailboxSize'), 10))]: + self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1) + + def MakeStaticBoxSizer(self, boxlabel): + """ + Make StaticBoxSizer + @param boxlabel : label of box sizer + @return sizer : the StaticBoxSizer labeled 'boxlabel' + """ + box = wx.StaticBox(self, -1, boxlabel) + sizer = wx.StaticBoxSizer(box, wx.VERTICAL) + + return sizer + + def GetWordAddressData(self, dict_tuple, format): + """ + This method converts word address data from EEPROM binary. + @param dict_tuple : element of 'sii_dict' dictionary in SetEEPROMData() + @param format : format of data. It can be 16(hex), 10(decimal) and 2(binary). + @return formatted value + """ + offset = int(str(dict_tuple[0]), 16) * 2 + length = int(str(dict_tuple[1]), 16) * 2 + list = [] + data = '' + for index in range(length): + hexdata = hex(ord(self.SiiBinary[offset + index]))[2:] + list.append(hexdata.zfill(2)) + + list.reverse() + data = list[0:length] + + if format == 16: + return '0x' + ''.join(data) + elif format == 10: + return str(int(str(''.join(data)), 16)) + elif format == 2: + ''.join(data) + + +# ------------------------------------------------------------------------------- +# For Smart View TreeListCtrl +# ------------------------------------------------------------------------------- +class SmartViewTreeListCtrl(wx.Panel): + def __init__(self, parent, Controler): + """ + Constructor + @param parent: Reference to the parent SlaveSiiSmartView class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + + wx.Panel.__init__(self, parent, -1, size=(350, 500)) + + self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=(350, 500), + style=(wx.TR_DEFAULT_STYLE | + wx.TR_FULL_ROW_HIGHLIGHT | + wx.TR_HIDE_ROOT | + wx.TR_COLUMN_LINES | + wx.TR_ROW_LINES)) + + self.Tree.AddColumn("Description", width=200) + self.Tree.AddColumn("Value", width=140) + self.Tree.SetMainColumn(0) + + self.Root = self.Tree.AddRoot("") + + # Add item + # Level 1 nodes + self.Level1Nodes = {} + for lv1 in ["Config Data", "Device Identity", "Mailbox"]: + self.Level1Nodes[lv1] = self.Tree.AppendItem(self.Root, lv1) + + # Level 2 nodes + # Config Data + self.ConfigData = {} + for lv2 in ["EEPROM Size (Bytes)", "PDI Type", "Device Emulation"]: + self.ConfigData[lv2] = self.Tree.AppendItem(self.Level1Nodes["Config Data"], lv2) + # Device Identity + self.DeviceIdentity = {} + for lv2 in ["Vendor ID", "Product Code", "Revision No.", "Serial No."]: + self.DeviceIdentity[lv2] = self.Tree.AppendItem(self.Level1Nodes["Device Identity"], lv2) + # Mailbox + self.Mailbox = {} + for lv2 in ["Supported Mailbox", "Bootstrap Configuration", "Standard Configuration"]: + self.Mailbox[lv2] = self.Tree.AppendItem(self.Level1Nodes["Mailbox"], lv2) + + # Level 3 nodes + # Children of Bootstrap Configuration + self.BootstrapConfig = {} + for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]: + self.BootstrapConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Bootstrap Configuration"], lv3) + # Children of Standard Configuration + self.StandardConfig = {} + for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]: + self.StandardConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Standard Configuration"], lv3) + + # Expand Tree + for tree in [self.Root, + self.Level1Nodes["Config Data"], + self.Level1Nodes["Device Identity"], + self.Level1Nodes["Mailbox"], + self.Mailbox["Bootstrap Configuration"], + self.Mailbox["Standard Configuration"]]: + self.Tree.Expand(tree) + + +# ------------------------------------------------------------------------------- +# For Hex View Panel +# shows EEPROM binary as hex data and characters. +# ------------------------------------------------------------------------------- +class HexView(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: Reference to the parent EtherCATManagementTreebook class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1) + self.parent = parent + self.Controler = controler + + self.HexRow = 8 + self.HexCol = 17 + + self.HexViewSizer = {"view": wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10), + "siiButton": wx.BoxSizer()} + self.HexViewButton = {} + + for key, evt_handler in [ + ("Sii Upload", self.OnButtonSiiUpload), + ("Sii Download", self.OnButtonSiiDownload), + ("Write to File", self.OnButtonWriteToBinFile), + ("Read from File", self.OnButtonReadFromBinFile), + ("XML to EEPROM Image", self.OnButtonXmlToEEPROMImg)]: + self.HexViewButton[key] = wx.Button(self, -1, key) + self.HexViewButton[key].Bind(wx.EVT_BUTTON, evt_handler) + self.HexViewSizer["siiButton"].Add(self.HexViewButton[key]) + + self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom() + self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) + self.SiiGrid = SiiGridTable(self, self.Controler, self.HexRow, self.HexCol) + self.HexViewSizer["view"].AddMany([self.HexViewSizer["siiButton"], self.SiiGrid]) + self.SiiGrid.CreateGrid(self.HexRow, self.HexCol) + self.SetSizer(self.HexViewSizer["view"]) + self.HexViewSizer["view"].FitInside(self.parent.parent) + self.parent.parent.FitInside() + self.SiiGrid.SetValue(self.HexCode) + self.SiiGrid.Update() + + def UpdateSiiGridTable(self, row, col): + """ + Destroy existing grid and recreate + @param row, col : Hex View grid size + """ + self.HexViewSizer["view"].Detach(self.SiiGrid) + self.SiiGrid.Destroy() + self.SiiGrid = SiiGridTable(self, self.Controler, row, col) + self.HexViewSizer["view"].Add(self.SiiGrid) + self.SiiGrid.CreateGrid(row, col) + self.SetSizer(self.HexViewSizer["view"]) + self.HexViewSizer["view"].FitInside(self.parent.parent) + self.parent.parent.FitInside() + + def OnButtonSiiUpload(self, event): + """ + Load EEPROM data from slave and refresh Hex View grid + Binded to 'Sii Upload' button. + @param event : wx.EVT_BUTTON object + """ + # Check whether beremiz connected or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + # load from EEPROM data and parsing + self.SiiBinary = self.Controler.CommonMethod.LoadData() + self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) + self.UpdateSiiGridTable(self.HexRow, self.HexCol) + self.SiiGrid.SetValue(self.HexCode) + self.SiiGrid.Update() + + def OnButtonSiiDownload(self, event): + """ + Write current EEPROM data to slave and refresh data structure kept by master + Binded to 'Sii Download' button. + @param event : wx.EVT_BUTTON object + """ + # Check whether beremiz connected or not, + # and whether status is "Started" or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus() + if status is not PlcStatus.Started: + self.Controler.CommonMethod.SiiWrite(self.SiiBinary) + self.Controler.CommonMethod.Rescan() + + def OnButtonWriteToBinFile(self, event): + """ + Save current EEPROM data to binary file through FileDialog + Binded to 'Write to File' button. + @param event : wx.EVT_BUTTON object + """ + dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), "slave0.bin", + _("bin files (*.bin)|*.bin|All files|*.*"), wx.SAVE | wx.OVERWRITE_PROMPT) + + if dialog.ShowModal() == wx.ID_OK: + filepath = dialog.GetPath() + binfile = open(filepath, "wb") + binfile.write(self.SiiBinary) + binfile.close() + + dialog.Destroy() + + def OnButtonReadFromBinFile(self, event): + """ + Load binary file through FileDialog + Binded to 'Read from File' button. + @param event : wx.EVT_BUTTON object + """ + dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", + _("bin files (*.bin)|*.bin"), wx.OPEN) + + if dialog.ShowModal() == wx.ID_OK: + filepath = dialog.GetPath() + + try: + binfile = open(filepath, "rb") + self.SiiBinary = binfile.read() + self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) + self.UpdateSiiGridTable(self.HexRow, self.HexCol) + self.SiiGrid.SetValue(self.HexCode) + self.SiiGrid.Update() + except Exception: + self.Controler.CommonMethod.CreateErrorDialog(_('The file does not exist!')) + + dialog.Destroy() + + def OnButtonXmlToEEPROMImg(self, event): + """ + Create EEPROM data based XML data that current imported + Binded to 'XML to EEPROM' button. + @param event : wx.EVT_BUTTON object + """ + self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom() + self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary) + self.UpdateSiiGridTable(self.HexRow, self.HexCol) + self.SiiGrid.SetValue(self.HexCode) + self.SiiGrid.Update() + + +# ------------------------------------------------------------------------------- +# For Hex View grid (fill hex data) +# ------------------------------------------------------------------------------- +class SiiGridTable(wx.grid.Grid): + def __init__(self, parent, controler, row, col): + """ + Constructor + @param parent: Reference to the parent HexView class + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + @param row, col: Hex View grid size + """ + self.parent = parent + self.Controler = controler + self.Row = row + self.Col = col + + wx.grid.Grid.__init__(self, parent, -1, size=(830, 450), + style=wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL) + + def SetValue(self, value): + """ + Set data in the table + @param value: EEPROM data list of which element is 1 Byte hex data + """ + # set label name and size + self.SetRowLabelSize(100) + for col in range(self.Col): + if col == 16: + self.SetColLabelValue(16, "Text View") + self.SetColSize(16, (self.GetSize().x-120)*4/20) + else: + self.SetColLabelValue(col, '%s' % col) + self.SetColSize(col, (self.GetSize().x-120)/20) + + # set data into table + row = col = 0 + for row_idx in value: + col = 0 + self.SetRowLabelValue(row, "0x"+"{:0>4x}".format(row*(self.Col-1))) + for hex in row_idx: + self.SetCellValue(row, col, hex) + + if col == 16: + self.SetCellAlignment(row, col, wx.ALIGN_LEFT, wx.ALIGN_CENTER) + else: + self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) + + self.SetReadOnly(row, col, True) + col = col + 1 + row = row + 1 + + +# ------------------------------------------------------------------------------- +# For Register Access Panel +# ------------------------------------------------------------------------------- +class RegisterAccessPanel(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: EEPROMAccessPanel object + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + self.parent = parent + self.Controler = controler + self.__init_data() + + wx.Panel.__init__(self, parent, -1) + + sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=2, vgap=5) + button_sizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10) + + self.ReloadButton = wx.Button(self, -1, "Reload") + self.CompactViewCheckbox = wx.CheckBox(self, -1, "Compact View") + self.RegisterNotebook = RegisterNotebook(self, self.Controler) + + button_sizer.AddMany([self.ReloadButton, self.CompactViewCheckbox]) + sizer.AddMany([button_sizer, self.RegisterNotebook]) + self.SetSizer(sizer) + + self.ReloadButton.Bind(wx.EVT_BUTTON, self.OnReloadButton) + self.CompactViewCheckbox.Bind(wx.EVT_CHECKBOX, self.ToggleCompactViewCheckbox) + + for index in range(4): + self.RegisterNotebook.RegPage[index].MainTable.CreateGrid(self.MainRow[index], self.MainCol) + self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512) + + # data default setting + if self.Controler.CommonMethod.RegData == "": + self.CompactViewCheckbox.Disable() + for index in range(4): + self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512) + else: # If data was saved, + self.BasicSetData() + self.ParseData() + for index in range(4): + self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, self.RegMonitorData, index*512, (index+1)*512) + + def __init_data(self): + """ + Declare initial data. + """ + # flag for compact view + self.CompactFlag = False + + # main grid의 rows and cols + self.MainRow = [512, 512, 512, 512] + self.MainCol = 4 + + # main grids' data range + self.PageRange = [] + for index in range(4): + self.PageRange.append([512*index, 512*(index+1)]) + + # Previous value of register data for register description configuration + self.PreRegSpec = {"ESCType": "", + "FMMUNumber": "", + "SMNumber": "", + "PDIType": ""} + + def LoadData(self): + """ + Get data from the register. + """ + self.Controler.CommonMethod.RegData = "" + # ethercat reg_read + # ex : ethercat reg_read -p 0 0x0000 0x0001 + # return value : 0x11 + for index in range(4): + self.Controler.CommonMethod.RegData = self.Controler.CommonMethod.RegData + " " + self.Controler.CommonMethod.RegRead("0x"+"{:0>4x}".format(index*1024), "0x0400") + + # store previous value + # (ESC type, port number of FMMU, port number of SM, and PDI type)) + for reg_spec in ["ESCType", "FMMUNumber", "SMNumber", "PDIType"]: + self.PreRegSpec[reg_spec] = self.Controler.CommonMethod.CrtRegSpec[reg_spec] + + # update registers' description + # (ESC type, port number of FMMU, port number of SM, and PDI type) + for reg_spec, address in [("ESCType", "0x0000"), + ("FMMUNumber", "0x0004"), + ("SMNumber", "0x0005"), + ("PDIType", "0x0140")]: + self.Controler.CommonMethod.CrtRegSpec[reg_spec] = self.Controler.CommonMethod.RegRead(address, "0x0001") + + # Enable compactView checkbox + self.CompactViewCheckbox.Enable() + + def BasicSetData(self): + """ + Get and save the description of registers. + It's done by parsing register_information.xml. + """ + # parse the above register's value + # If the value is 0x12, the result is 12 + self.ESCType = self.Controler.CommonMethod.CrtRegSpec["ESCType"].split('x')[1] + self.PDIType = self.Controler.CommonMethod.CrtRegSpec["PDIType"].split('x')[1] + # If the value is 0x12, the result is 18 (It's converted to decimal value) + self.FMMUNumber = int(self.Controler.CommonMethod.CrtRegSpec["FMMUNumber"], 16) + self.SMNumber = int(self.Controler.CommonMethod.CrtRegSpec["SMNumber"], 16) + + # initialize description dictionary of register main table and register sub table. + self.RegisterDescriptionDict = {} + self.RegisterSubGridDict = {} + + # ./EthercatMaster/register_information.xml contains register description. + if wx.Platform == '__WXMSW__': + reg_info_file = open("../../EthercatMaster/register_information.xml", 'r') + else: + reg_info_file = open("./EthercatMaster/register_information.xml", 'r') + reg_info_tree = minidom.parse(reg_info_file) + reg_info_file.close() + + # parse register description + for register_info in reg_info_tree.childNodes: + for register in register_info.childNodes: + if register.nodeType == reg_info_tree.ELEMENT_NODE and register.nodeName == "Register": + # If it depends on the property(ESC type, PDI type, FMMU number, SM number) + for property, type, value in [("esc", "type", self.ESCType), + ("pdi", "type", self.PDIType), + ("fmmu", "number", self.FMMUNumber), + ("sm", "number", self.SMNumber)]: + if property in register.attributes.keys(): + if type == "type": + if register.attributes[property].value == value: + self.GetRegisterInfo(reg_info_tree, register) + break + else: # type == "number" + if register.attributes[property].value < value: + self.GetRegisterInfo(reg_info_tree, register) + break + else: + self.GetRegisterInfo(reg_info_tree, register) + break + + def GetRegisterInfo(self, reg_info_tree, register): + """ + Save the register's description into the dictionary. + reg_info_tree is based on the register_information.xml. + @param reg_info_tree: XML tree + @param register: register which you want to get the description + """ + # temporary variables for register main table idescription dictionary + reg_index = "" + reg_main_description = "" + + for data in register.childNodes: + if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Index": + for index in data.childNodes: + reg_index = index.nodeValue + if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Description": + for description in data.childNodes: + reg_main_description = description.nodeValue + + # Add description for register main table + if reg_index != "" and reg_main_description != "": + self.RegisterDescriptionDict[reg_index] = reg_main_description + + if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Details": + # declare register sub table description dictionary about this index + self.RegisterSubGridDict[reg_index] = [] + + for detail in data.childNodes: + if detail.nodeType == reg_info_tree.ELEMENT_NODE and detail.nodeName == "Detail": + # If it depends on the property(ESC type, PDI type, FMMU number, SM number) + for property, type, value in [("esc", "type", self.ESCType), + ("pdi", "type", self.PDIType), + ("fmmu", "number", self.FMMUNumber), + ("sm", "number", self.SMNumber)]: + if property in detail.attributes.keys(): + if type == "type": + if detail.attributes[property].value == value: + self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) + break + else: # type == "number" + if detail.attributes[property].value < value: + self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) + break + else: + self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) + break + + def GetRegisterDetailInfo(self, reg_info_tree, reg_index, detail): + """ + Get the resgister's detailed description(for sub table) from the reg_info_tree. + @param reg_info_tree: XML tree (register_information.xml) + @param reg_index: index of the register + @param detail: description of the register + """ + # temporary variables for register sub table description dictionary + # - It is initialized in every sub description + reg_bit_range = "" + reg_sub_description = "" + reg_enum_dictionary = {} + + for detail_data in detail.childNodes: + if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Range": + for range in detail_data.childNodes: + reg_bit_range = range.nodeValue + if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Description": + for description in detail_data.childNodes: + reg_sub_description = description.nodeValue + + if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Enum": + for enum in detail_data.childNodes: + if enum.nodeType == reg_info_tree.ELEMENT_NODE and enum.nodeName == "item": + + # temporary variables for a description of each value + # For example, if the bit is 1, it is 'enabled'('On', 'True', etc.), + # otherwise 'disabled'('Off', 'False', etc.). + reg_sub_value = "" + reg_sub_value_description = "" + + for item in enum.childNodes: + if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "value": + for value in item.childNodes: + reg_sub_value = value.nodeValue + if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "Description": + for description in item.childNodes: + reg_sub_value_description = description.nodeValue + + # Add a description of each value to register enum dictionary + if reg_sub_value != "" and reg_sub_value_description != "": + reg_enum_dictionary[reg_sub_value] = reg_sub_value_description + + # add a description to register sub table description dictionary + if reg_bit_range != "" and reg_sub_description != "": + self.RegisterSubGridDict[reg_index].append([reg_bit_range, + reg_sub_description, + reg_enum_dictionary]) + + def ParseData(self): + """ + Transform the data into dec, hex, string, and description + """ + row_data = [] + self.RegMonitorData = [] + reg_word = "" + + reg_data = self.Controler.CommonMethod.RegData.split() + + # loop for register(0x0000:0x0fff) + for address in range(0x1000): + # arrange 2 Bytes of register data + reg_word = reg_data[address].split('x')[1] + reg_word + if (address % 2) == 1: + # append address + hex_address = "{:0>4x}".format(address-1) + row_data.append(hex_address) + + # append description + if hex_address in self.RegisterDescriptionDict: + row_data.append(self.RegisterDescriptionDict[hex_address]) + else: + row_data.append("") + + # append Decimal value + row_data.append(str(int(reg_word, 16))) + + # append Hex value + row_data.append('0x'+reg_word) + + # append ASCII value + char_data = "" + for iter in range(2): + if int(reg_word[iter*2:iter*2+2], 16) >= 32 and int(reg_word[iter*2:iter*2+2], 16) <= 126: + char_data = char_data + chr(int(reg_word[iter*2:iter*2+2], 16)) + else: + char_data = char_data + "." + row_data.append(char_data) + + self.RegMonitorData.append(row_data) + reg_word = "" # initialize regWord + row_data = [] + + def OnReloadButton(self, event): + """ + Handle the click event of the 'Reload' button. + Get the data from registers again, and update the table. + @param event: wx.EVT_BUTTON object + """ + # Check whether beremiz connected or not. + check_connect_flag = self.Controler.CommonMethod.CheckConnect(False) + if check_connect_flag: + self.LoadData() + self.BasicSetData() + self.ParseData() + # set data into UI + if self.CompactFlag: + self.ToggleCompactViewCheckbox(True) + else: + for index in range(4): + self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol, + self.PageRange[index][0], self.PageRange[index][1], + self.RegMonitorData) + + def ToggleCompactViewCheckbox(self, event): + """ + Handles the event of the 'Compact view' check box. + If it's checked, show only the registers that have a description. + If not, show all the registers. + @param event: wx.EVT_CHECKBOX object + """ + + # If "Compact View" Checkbox is True + # 'event' is argument of this method or event of checkbox. + if event is True or event.GetEventObject().GetValue(): + self.CompactFlag = True + + reg_compact_data = [] + page_row = [0, 0, 0, 0] + for index in range(4): + self.PageRange[index] = [0, 0] + + for reg_row_data in self.RegMonitorData: + if reg_row_data[1] != "": + # data structure for "compact view" + reg_compact_data.append(reg_row_data) + # count for each register notebooks' row + # It compare with register's address. + for index in range(4): + if int('0x'+reg_row_data[0], 16) < (index+1)*1024: + page_row[index] += 1 + break + + # Setting tables' rows and cols, range for compact view + for index in range(4): + self.MainRow[index] = page_row[index] + self.PageRange[index][1] = page_row[index] + for iter in range(index): + self.PageRange[index][0] += page_row[iter] + self.PageRange[index][1] += page_row[iter] + + # Update table + for index in range(4): + self.RegisterNotebook.RegPage[index].UpdateMainTable( + self.MainRow[index], + self.MainCol, + self.PageRange[index][0], + self.PageRange[index][1], + reg_compact_data) + + # Compact View Checkbox is False + else: + self.CompactFlag = False + # Setting original rows, cols and range + self.MainRow = [512, 512, 512, 512] + self.PageRange = [] + + for index in range(4): + self.PageRange.append([512*index, 512*(index+1)]) + + # Update table + for index in range(4): + self.RegisterNotebook.RegPage[index].UpdateMainTable( + self.MainRow[index], + self.MainCol, + self.PageRange[index][0], + self.PageRange[index][1], + self.RegMonitorData) + + +# ------------------------------------------------------------------------------- +# For Register Access Notebook (divide index range) +# ------------------------------------------------------------------------------- +class RegisterNotebook(wx.Notebook): + def __init__(self, parent, controler): + """ + Constructor + @param parent: RegisterAccessPanel object + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Notebook.__init__(self, parent, id=-1) + + self.parent = parent + self.Controler = controler + + # Initialize pages + self.RegPage = [] + pages = 4 + for dummy in range(pages): + self.RegPage.append(None) + + for index in range(pages): + self.RegPage[index] = RegisterNotebookPanel(self, self.Controler, + parent.MainRow[index], parent.MainCol) + self.AddPage(self.RegPage[index], + "0x"+"{:0>4x}".format(index*1024)+" - 0x"+"{:0>4x}".format((index+1)*1024-1)) + + +# ------------------------------------------------------------------------------- +# For Register Access Notebook Panel +# (Main UI : including main, sub table) +# ------------------------------------------------------------------------------- +class RegisterNotebookPanel(wx.Panel): + def __init__(self, parent, controler, row, col): + """ + Constructor + @param parent: RegisterAccessPanel object + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + @param row, col: size of the table + """ + wx.Panel.__init__(self, parent, -1) + + self.parent = parent + self.Controler = controler + self.Row = row + self.Col = col + sub_row = 0 + sub_col = 4 + + self.Sizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=30) + + self.MainTable = RegisterMainTable(self, self.Row, self.Col, self.Controler) + self.SubTable = RegisterSubTable(self, sub_row, sub_col) + + self.SubTable.CreateGrid(sub_row, sub_col) + self.SubTable.SetValue(self, []) + + self.Sizer.AddMany([self.MainTable, self.SubTable]) + + self.SetSizer(self.Sizer) + + def UpdateMainTable(self, row, col, low_index, high_index, data): + """ + Updates main table. + It's done by deleting the main table and creating it again. + @param row, col: size of the table + @param low_index: the lowest index of the page + @param high_index: the highest index of the page + @param data: data + """ + self.MainTable.Destroy() + self.MainTable = RegisterMainTable(self, row, col, self.Controler) + self.Sizer.Detach(self.SubTable) + self.Sizer.AddMany([self.MainTable, self.SubTable]) + self.SetSizer(self.Sizer) + self.MainTable.CreateGrid(row, col) + self.MainTable.SetValue(self, data, low_index, high_index) + self.MainTable.Update() + + def UpdateSubTable(self, row, col, data): + """ + Updates sub table. + It's done by deleting the sub table and creating it again. + @param row, col: size of the table + @param data: data + """ + self.SubTable.Destroy() + self.SubTable = RegisterSubTable(self, row, col) + self.Sizer.Detach(self.MainTable) + self.Sizer.AddMany([self.MainTable, self.SubTable]) + self.Sizer.Layout() + self.SetSizer(self.Sizer) + self.SubTable.CreateGrid(row, col) + self.SubTable.SetValue(self, data) + self.SubTable.Update() + + +# ------------------------------------------------------------------------------- +# For Register Access Notebook Panel (Main Table) +# ------------------------------------------------------------------------------- +class RegisterMainTable(wx.grid.Grid): + def __init__(self, parent, row, col, controler): + """ + Constructor + @param parent: RegisterNotebook object + @param row, col: size of the table + @param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + self.parent = parent + self.Data = {} + self.Row = row + self.Col = col + self.Controler = controler + self.RegisterAccessPanel = self.parent.parent.parent + + wx.grid.Grid.__init__(self, parent, -1, size=(820, 300), + style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL) + + for evt, mapping_method in [(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell), + (wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell), + (wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnRegModifyDialog)]: + self.Bind(evt, mapping_method) + + def SetValue(self, parent, reg_monitor_data, low_index, high_index): + """ + Set the RegMonitorData into the main table. + @param parent: RegisterNotebook object + @param reg_monitor_data: data + @param low_index: the lowest index of the page + @param high_index: the highest index of the page + """ + self.RegMonitorData = reg_monitor_data + + # set label name and size + register_maintable_label = [(0, "Description"), (1, "Dec"), + (2, "Hex"), (3, "Char")] + + for (index, label) in register_maintable_label: + self.SetColLabelValue(index, label) + + self.SetColSize(0, 200) + + # if reg_monitor_data is 0, it is initialization of register access. + if reg_monitor_data == 0: + return 0 + + # set data into UI + row = col = 0 + for row_index in reg_monitor_data[low_index:high_index]: + col = 0 + self.SetRowLabelValue(row, row_index[0]) + for data_index in range(4): + self.SetCellValue(row, col, row_index[data_index+1]) + self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) + self.SetReadOnly(row, col, True) + col = col + 1 + row = row + 1 + + def OnSelectCell(self, event): + """ + Handles the event of the cell of the main table. + @param event: wx.grid object (left click) + """ + # if reg_monitor_data is 0, it is initialization of register access. + if self.RegMonitorData == 0: + event.Skip() + return 0 + + sub_row = 0 + sub_col = 4 + + address = self.GetRowLabelValue(event.GetRow()) + + reg_sub_grid_data = [] + + BIT_RANGE, NAME, DESCRIPTIONS = range(3) + + # Check if this register's detail description is exist or not, + # and create data structure for the detail description table ; sub grid + if address in self.RegisterAccessPanel.RegisterSubGridDict: + for element in self.RegisterAccessPanel.RegisterSubGridDict[address]: + row_data = [] + row_data.append(element[BIT_RANGE]) + row_data.append(element[NAME]) + bin_data = "{:0>16b}".format(int(self.GetCellValue(event.GetRow(), 1))) + value_range = element[BIT_RANGE].split('-') + value = (bin_data[8:16][::-1]+bin_data[0:8][::-1])[int(value_range[0]):(int(value_range[-1])+1)][::-1] + row_data.append(str(int(('0b'+str(value)), 2))) + if value in element[DESCRIPTIONS]: + row_data.append(element[DESCRIPTIONS][value]) + else: + row_data.append('') + reg_sub_grid_data.append(row_data) + sub_row = sub_row + 1 + + self.parent.UpdateSubTable(sub_row, sub_col, reg_sub_grid_data) + # event.Skip() updates UI of selecting cell + event.Skip() + + def OnRegModifyDialog(self, event): + """ + Handle the event of the cell of the main table. + Display the window where the user modifies the value of the cell. + @param event: wx.grid object (double click) + """ + # user can enter a value in case that user double-clicked 'Dec' or 'Hex' value. + if event.GetCol() == 1 or event.GetCol() == 2: + dlg = wx.TextEntryDialog(self, _("Enter hex(0xnnnn) or dec(n) value"), + _("Register Modify Dialog"), style=wx.OK | wx.CANCEL) + + # Setting value in initial dialog value + start_value = self.GetCellValue(event.GetRow(), event.GetCol()) + dlg.SetValue(start_value) + + if dlg.ShowModal() == wx.ID_OK: + try: + # It int(input) success, this input is dev or hex value. + # Otherwise, it's error, so it goes except. + int(dlg.GetValue(), 0) + + # reg_write + # ex) ethercat reg_write -p 0 -t uint16 0x0000 0x0000 + return_val = self.Controler.CommonMethod.RegWrite('0x'+self.GetRowLabelValue(event.GetRow()), dlg.GetValue()) + + if len(return_val) == 0: + # set dec + self.SetCellValue(event.GetRow(), 1, str(int(dlg.GetValue(), 0))) + # set hex + hex_data = '0x'+"{:0>4x}".format(int(dlg.GetValue(), 0)) + self.SetCellValue(event.GetRow(), 2, hex_data) + # set char + char_data = "" + # If hex_data is been able to convert to ascii code, append ascii code. + for iter in range(2): + if int(hex_data[(iter+1)*2:(iter+2)*2], 16) >= 32 and int(hex_data[(iter+1)*2:(iter+2)*2], 16) <= 126: + char_data = char_data + chr(int(hex_data[(iter+1)*2:(iter+2)*2], 16)) + else: + char_data = char_data + "." + + self.SetCellValue(event.GetRow(), 3, char_data) + + else: + self.Controler.CommonMethod.CreateErrorDialog(_('You can\'t modify it. This register is read-only or it\'s not connected.')) + + except ValueError: + self.Controler.CommonMethod.CreateErrorDialog(_('You entered wrong value. You can enter dec or hex value only.')) + + +# ------------------------------------------------------------------------------- +# For Register Access Notebook Panel (Sub Table) +# ------------------------------------------------------------------------------- +class RegisterSubTable(wx.grid.Grid): + def __init__(self, parent, row, col): + """ + Constructor + @param parent: RegisterNotebook object + @param row, col: size of the table + """ + self.parent = parent + self.Data = {} + self.Row = row + self.Col = col + + wx.grid.Grid.__init__(self, parent, -1, size=(820, 150), + style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL) + + def SetValue(self, parent, data): + """ + Set the data into the subtable. + @param parent: RegisterNotebook object + @param data: data + """ + # lset label name and size + Register_SubTable_Label = [(0, "Bits"), (1, "Name"), + (2, "Value"), (3, "Enum")] + + for (index, label) in Register_SubTable_Label: + self.SetColLabelValue(index, label) + + self.SetColSize(1, 200) + self.SetColSize(3, 200) + + # set data into table + row = col = 0 + for rowData in data: + col = 0 + for element in rowData: + self.SetCellValue(row, col, element) + self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER) + self.SetReadOnly(row, col, True) + col = col + 1 + row = row + 1 + + +# ------------------------------------------------------------------------------- +# For Master State Panel +# ------------------------------------------------------------------------------- +class MasterStatePanelClass(wx.Panel): + def __init__(self, parent, controler): + """ + Constructor + @param parent: wx.ScrollWindow object + @Param controler: _EthercatSlaveCTN class in EthercatSlave.py + """ + wx.Panel.__init__(self, parent, -1, (0, 0), + size=wx.DefaultSize, style=wx.SUNKEN_BORDER) + self.Controler = controler + self.parent = parent + self.StaticBox = {} + self.StaticText = {} + self.TextCtrl = {} + + # ----------------------- Main Sizer and Update Button -------------------------------------------- + self.MasterStateSizer = {"main": wx.BoxSizer(wx.VERTICAL)} + for key, attr in [ + ("innerMain", [1, 10, 2, 10]), + ("innerTopHalf", [2, 10, 1, 10]), + ("innerBottomHalf", [2, 10, 1, 10]), + ("innerMasterState", [2, 10, 3, 10]), + ("innerDeviceInfo", [4, 10, 3, 10]), + ("innerFrameInfo", [4, 10, 5, 10])]: + self.MasterStateSizer[key] = wx.FlexGridSizer(cols=attr[0], hgap=attr[1], rows=attr[2], vgap=attr[3]) + + self.UpdateButton = wx.Button(self, label=_('Update')) + self.UpdateButton.Bind(wx.EVT_BUTTON, self.OnButtonClick) + + for key, label in [ + ('masterState', 'EtherCAT Master State'), + ('deviceInfo', 'Ethernet Network Card Information'), + ('frameInfo', 'Network Frame Information')]: + self.StaticBox[key] = wx.StaticBox(self, label=_(label)) + self.MasterStateSizer[key] = wx.StaticBoxSizer(self.StaticBox[key]) + + # ----------------------- Master State ----------------------------------------------------------- + for key, label in [ + ('Phase', 'Phase:'), + ('Active', 'Active:'), + ('Slaves', 'Slave Count:')]: + self.StaticText[key] = wx.StaticText(self, label=_(label)) + self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) + self.MasterStateSizer['innerMasterState'].AddMany([self.StaticText[key], self.TextCtrl[key]]) + + self.MasterStateSizer['masterState'].AddSizer(self.MasterStateSizer['innerMasterState']) + + # ----------------------- Ethernet Network Card Information --------------------------------------- + for key, label in [ + ('Main', 'MAC Address:'), + ('Link', 'Link State:'), + ('Tx frames', 'Tx Frames:'), + ('Rx frames', 'Rx Frames:'), + ('Lost frames', 'Lost Frames:')]: + self.StaticText[key] = wx.StaticText(self, label=_(label)) + self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) + self.MasterStateSizer['innerDeviceInfo'].AddMany([self.StaticText[key], self.TextCtrl[key]]) + + self.MasterStateSizer['deviceInfo'].AddSizer(self.MasterStateSizer['innerDeviceInfo']) + + # ----------------------- Network Frame Information ----------------------------------------------- + for key, label in [ + ('Tx frame rate [1/s]', 'Tx Frame Rate [1/s]:'), + ('Rx frame rate [1/s]', 'Tx Rate [kByte/s]:'), + ('Loss rate [1/s]', 'Loss Rate [1/s]:'), + ('Frame loss [%]', 'Frame Loss [%]:')]: + self.StaticText[key] = wx.StaticText(self, label=_(label)) + self.MasterStateSizer['innerFrameInfo'].Add(self.StaticText[key]) + self.TextCtrl[key] = {} + for index in ['0', '1', '2']: + self.TextCtrl[key][index] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY) + self.MasterStateSizer['innerFrameInfo'].Add(self.TextCtrl[key][index]) + + self.MasterStateSizer['frameInfo'].AddSizer(self.MasterStateSizer['innerFrameInfo']) + + # --------------------------------- Main Sizer ---------------------------------------------------- + for key, sub, in [ + ('innerTopHalf', ['masterState', 'deviceInfo']), + ('innerBottomHalf', ['frameInfo']), + ('innerMain', ['innerTopHalf', 'innerBottomHalf']) + ]: + for key2 in sub: + self.MasterStateSizer[key].AddSizer(self.MasterStateSizer[key2]) + + self.MasterStateSizer['main'].AddSizer(self.UpdateButton) + self.MasterStateSizer['main'].AddSizer(self.MasterStateSizer['innerMain']) + + self.SetSizer(self.MasterStateSizer['main']) + + def OnButtonClick(self, event): + """ + Handle the event of the 'Update' button. + Update the data of the master state. + @param event: wx.EVT_BUTTON object + """ + if self.Controler.GetCTRoot()._connector is not None: + self.MasterState = self.Controler.CommonMethod.GetMasterState() + # Update each TextCtrl + if self.MasterState: + for key in self.TextCtrl: + if isinstance(self.TextCtrl[key], dict): + for index in self.TextCtrl[key]: + self.TextCtrl[key][index].SetValue(self.MasterState[key][int(index)]) + else: + self.TextCtrl[key].SetValue(self.MasterState[key][0]) + else: + self.Controler.CommonMethod.CreateErrorDialog(_('PLC not connected!')) diff -r e0f16317668e -r 15f18dc8b56a etherlab/EthercatCFileGenerator.py --- a/etherlab/EthercatCFileGenerator.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/EthercatCFileGenerator.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,9 +9,10 @@ # # See COPYING file for copyrights details. +from __future__ import absolute_import import os -from EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName +from etherlab.EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName SLAVE_PDOS_CONFIGURATION_DECLARATION = """ /* Slave %(slave)d, "%(device_type)s" @@ -68,13 +69,15 @@ } """ + def ConfigureVariable(entry_infos, str_completion): entry_infos["data_type"] = DATATYPECONVERSION.get(entry_infos["var_type"], None) if entry_infos["data_type"] is None: - raise ValueError, _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"] - + msg = _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"] + raise ValueError(msg) + if not entry_infos.get("no_decl", False): - if entry_infos.has_key("real_var"): + if "real_var" in entry_infos: str_completion["located_variables_declaration"].append( "IEC_%(var_type)s %(real_var)s;" % entry_infos) else: @@ -85,45 +88,46 @@ for declaration in entry_infos.get("extra_declarations", []): entry_infos["extra_decl"] = declaration str_completion["located_variables_declaration"].append( - "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos) - elif not entry_infos.has_key("real_var"): + "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos) + elif "real_var" not in entry_infos: entry_infos["real_var"] = "beremiz" + entry_infos["var_name"] - + str_completion["used_pdo_entry_offset_variables_declaration"].append( "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x;" % entry_infos) - + if entry_infos["data_type"] == "BIT": str_completion["used_pdo_entry_offset_variables_declaration"].append( "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x_bit;" % entry_infos) - + str_completion["used_pdo_entry_configuration"].append( - (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " + - "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " + - "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos) - + (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " + + "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " + + "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos) + if entry_infos["dir"] == "I": str_completion["retrieve_variables"].append( - (" %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + - "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos) + (" %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + + "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos) elif entry_infos["dir"] == "Q": str_completion["publish_variables"].append( - (" EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + - "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos) - + (" EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + + "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos) + else: str_completion["used_pdo_entry_configuration"].append( - (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " + + (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " + "%(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x},") % entry_infos) - + if entry_infos["dir"] == "I": str_completion["retrieve_variables"].append( - (" %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " + + (" %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " + "slave%(slave)d_%(index).4x_%(subindex).2x);") % entry_infos) elif entry_infos["dir"] == "Q": str_completion["publish_variables"].append( - (" EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + + (" EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " + "%(real_var)s);") % entry_infos) + def ExclusionSortFunction(x, y): if x["matching"] == y["matching"]: if x["assigned"] and not y["assigned"]: @@ -133,23 +137,24 @@ return cmp(x["count"], y["count"]) return -cmp(x["matching"], y["matching"]) -class _EthercatCFileGenerator: - + +class _EthercatCFileGenerator(object): + def __init__(self, controler): self.Controler = controler - + self.Slaves = [] self.UsedVariables = {} def __del__(self): - self.Controler = None - + self.Controler = None + def DeclareSlave(self, slave_index, slave): self.Slaves.append((slave_index, slave.getInfo().getAutoIncAddr(), slave)) def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name, no_decl=False): slave_variables = self.UsedVariables.setdefault(slave_index, {}) - + entry_infos = slave_variables.get((index, subindex), None) if entry_infos is None: slave_variables[(index, subindex)] = { @@ -162,18 +167,20 @@ entry_infos["infos"][4].append(name) return entry_infos["infos"][2] else: - raise ValueError, _("Output variables can't be defined with different locations (%s and %s)") % (entry_infos["infos"][2], name) + msg = _("Output variables can't be defined with different locations ({a1} and {a2})").\ + format(a1=entry_infos["infos"][2], a2=name) + raise ValueError(msg) else: - raise ValueError, _("Definition conflict for location \"%s\"") % name - + raise ValueError(_("Definition conflict for location \"%s\"") % name) + def GenerateCFile(self, filepath, location_str, master_number): - + # Extract etherlab master code template plc_etherlab_filepath = os.path.join(os.path.split(__file__)[0], "plc_etherlab.c") plc_etherlab_file = open(plc_etherlab_filepath, 'r') plc_etherlab_code = plc_etherlab_file.read() plc_etherlab_file.close() - + # Initialize strings for formatting master code template str_completion = { "location": location_str, @@ -189,49 +196,51 @@ "retrieve_variables": [], "publish_variables": [], } - + # Initialize variable storing variable mapping state for slave_entries in self.UsedVariables.itervalues(): for entry_infos in slave_entries.itervalues(): entry_infos["mapped"] = False - + # Sort slaves by position (IEC_Channel) self.Slaves.sort() # Initialize dictionary storing alias auto-increment position values alias = {} - + # Generating code for each slave for (slave_idx, slave_alias, slave) in self.Slaves: type_infos = slave.getType() - + # Defining slave alias and auto-increment position if alias.get(slave_alias) is not None: alias[slave_alias] += 1 else: alias[slave_alias] = 0 slave_pos = (slave_alias, alias[slave_alias]) - + # Extract slave device informations device, module_extra_params = self.Controler.GetModuleInfos(type_infos) if device is None: - raise ValueError, _("No informations found for device %s!") % (type_infos["device_type"]) - + msg = _("No informations found for device %s!") \ + % (type_infos["device_type"]) + raise ValueError(msg) + # Extract slaves variables to be mapped slave_variables = self.UsedVariables.get(slave_idx, {}) - + # Extract slave device object dictionary entries device_entries = device.GetEntriesList() - + # Adding code for declaring slave in master code template strings for element in ["vendor", "product_code", "revision_number"]: type_infos[element] = ExtractHexDecValue(type_infos[element]) type_infos.update(dict(zip(["slave", "alias", "position"], (slave_idx,) + slave_pos))) - + # Extract slave device CoE informations device_coe = device.getCoE() if device_coe is not None: - - # If device support CanOpen over Ethernet, adding code for calling + + # If device support CanOpen over Ethernet, adding code for calling # init commands when initializing slave in master code template strings initCmds = [] for initCmd in device_coe.getInitCmd(): @@ -256,37 +265,37 @@ } init_cmd_infos.update(type_infos) str_completion["slaves_initialization"] += SLAVE_INITIALIZATION_TEMPLATE % init_cmd_infos - + # Extract slave device PDO configuration capabilities PdoAssign = device_coe.getPdoAssign() PdoConfig = device_coe.getPdoConfig() else: PdoAssign = PdoConfig = False - + # Test if slave has a configuration or need one if len(device.getTxPdo() + device.getRxPdo()) > 0 or len(slave_variables) > 0 and PdoConfig and PdoAssign: - + str_completion["slaves_declaration"] += "static ec_slave_config_t *slave%(slave)d = NULL;\n" % type_infos str_completion["slaves_configuration"] += SLAVE_CONFIGURATION_TEMPLATE % type_infos - - # Initializing + + # Initializing pdos_infos = { "pdos_entries_infos": [], "pdos_infos": [], - "pdos_sync_infos": [], + "pdos_sync_infos": [], } pdos_infos.update(type_infos) - + sync_managers = [] for sync_manager_idx, sync_manager in enumerate(device.getSm()): sync_manager_infos = { - "index": sync_manager_idx, + "index": sync_manager_idx, "name": sync_manager.getcontent(), "slave": slave_idx, - "pdos": [], + "pdos": [], "pdos_number": 0, } - + sync_manager_control_byte = ExtractHexDecValue(sync_manager.getControlByte()) sync_manager_direction = sync_manager_control_byte & 0x0c sync_manager_watchdog = sync_manager_control_byte & 0x40 @@ -298,50 +307,50 @@ sync_manager_infos["watchdog"] = "EC_WD_ENABLE" else: sync_manager_infos["watchdog"] = "EC_WD_DISABLE" - + sync_managers.append(sync_manager_infos) - + pdos_index = [] exclusive_pdos = {} selected_pdos = [] for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] + [(pdo, "Outputs") for pdo in device.getRxPdo()]): - + pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) pdos_index.append(pdo_index) - + excluded_list = pdo.getExclude() if len(excluded_list) > 0: exclusion_list = [pdo_index] for excluded in excluded_list: exclusion_list.append(ExtractHexDecValue(excluded.getcontent())) exclusion_list.sort() - + exclusion_scope = exclusive_pdos.setdefault(tuple(exclusion_list), []) - + entries = pdo.getEntry() pdo_mapping_match = { - "index": pdo_index, - "matching": 0, - "count": len(entries), + "index": pdo_index, + "matching": 0, + "count": len(entries), "assigned": pdo.getSm() is not None } exclusion_scope.append(pdo_mapping_match) - + for entry in entries: index = ExtractHexDecValue(entry.getIndex().getcontent()) subindex = ExtractHexDecValue(entry.getSubIndex()) if slave_variables.get((index, subindex), None) is not None: pdo_mapping_match["matching"] += 1 - - if pdo.getFixed() != True: + + if pdo.getFixed() is not True: pdo_mapping_match["matching"] += \ module_extra_params["max_pdo_size"] - \ pdo_mapping_match["count"] - + elif pdo.getMandatory(): selected_pdos.append(pdo_index) - + excluded_pdos = [] for exclusion_scope in exclusive_pdos.itervalues(): exclusion_scope.sort(ExclusionSortFunction) @@ -349,22 +358,23 @@ if exclusion_scope[0]["matching"] > 0: selected_pdos.append(exclusion_scope[0]["index"]) start_excluding_index = 1 - excluded_pdos.extend([pdo["index"] - for pdo in exclusion_scope[start_excluding_index:] + excluded_pdos.extend([ + pdo["index"] + for pdo in exclusion_scope[start_excluding_index:] if PdoAssign or not pdo["assigned"]]) - + for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] + [(pdo, "Outputs") for pdo in device.getRxPdo()]): entries = pdo.getEntry() - + pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent()) if pdo_index in excluded_pdos: continue - + pdo_needed = pdo_index in selected_pdos - + entries_infos = [] - + for entry in entries: index = ExtractHexDecValue(entry.getIndex().getcontent()) subindex = ExtractHexDecValue(entry.getSubIndex()) @@ -376,30 +386,30 @@ } entry_infos.update(type_infos) entries_infos.append(" {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos) - + entry_declaration = slave_variables.get((index, subindex), None) if entry_declaration is not None and not entry_declaration["mapped"]: pdo_needed = True - - entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"], + + entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"], entry_declaration["infos"]))) entry_declaration["mapped"] = True - + entry_type = entry.getDataType().getcontent() if entry_infos["var_type"] != entry_type: message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"] - if (self.Controler.GetSizeOfType(entry_infos["var_type"]) != - self.Controler.GetSizeOfType(entry_type)): - raise ValueError, message + if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \ + self.Controler.GetSizeOfType(entry_type): + raise ValueError(message) else: self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n") - - if (entry_infos["dir"] == "I" and pdo_type != "Inputs" or - entry_infos["dir"] == "Q" and pdo_type != "Outputs"): - raise ValueError, _("Wrong direction for location \"%s\"!") % entry_infos["var_name"] - + + if (entry_infos["dir"] == "I" and pdo_type != "Inputs") or \ + (entry_infos["dir"] == "Q" and pdo_type != "Outputs"): + raise ValueError(_("Wrong direction for location \"%s\"!") % entry_infos["var_name"]) + ConfigureVariable(entry_infos, str_completion) - + elif pdo_type == "Outputs" and entry.getDataType() is not None and device_coe is not None: data_type = entry.getDataType().getcontent() entry_infos["dir"] = "Q" @@ -407,59 +417,60 @@ entry_infos["data_type"] = DATATYPECONVERSION.get(data_type) entry_infos["var_type"] = data_type entry_infos["real_var"] = "slave%(slave)d_%(index).4x_%(subindex).2x_default" % entry_infos - + ConfigureVariable(entry_infos, str_completion) - + str_completion["slaves_output_pdos_default_values_extraction"] += \ SLAVE_OUTPUT_PDO_DEFAULT_VALUE % entry_infos - + if pdo_needed: for excluded in pdo.getExclude(): excluded_index = ExtractHexDecValue(excluded.getcontent()) if excluded_index not in excluded_pdos: excluded_pdos.append(excluded_index) - + sm = pdo.getSm() if sm is None: for sm_idx, sync_manager in enumerate(sync_managers): if sync_manager["name"] == pdo_type: sm = sm_idx if sm is None: - raise ValueError, _("No sync manager available for %s pdo!") % pdo_type - + raise ValueError(_("No sync manager available for %s pdo!") % pdo_type) + sync_managers[sm]["pdos_number"] += 1 sync_managers[sm]["pdos"].append( {"slave": slave_idx, "index": pdo_index, "name": ExtractName(pdo.getName()), - "type": pdo_type, + "type": pdo_type, "entries": entries_infos, "entries_number": len(entries_infos), - "fixed": pdo.getFixed() == True}) - + "fixed": pdo.getFixed() is True}) + if PdoConfig and PdoAssign: dynamic_pdos = {} dynamic_pdos_number = 0 - for category, min_index, max_index in [("Inputs", 0x1600, 0x1800), + for category, min_index, max_index in [("Inputs", 0x1600, 0x1800), ("Outputs", 0x1a00, 0x1C00)]: for sync_manager in sync_managers: if sync_manager["name"] == category: category_infos = dynamic_pdos.setdefault(category, {}) category_infos["sync_manager"] = sync_manager - category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"] + category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"] if not pdo["fixed"] and pdo["type"] == category] category_infos["current_index"] = min_index category_infos["max_index"] = max_index break - + for (index, subindex), entry_declaration in slave_variables.iteritems(): - + if not entry_declaration["mapped"]: entry = device_entries.get((index, subindex), None) if entry is None: - raise ValueError, _("Unknown entry index 0x%4.4x, subindex 0x%2.2x for device %s") % \ - (index, subindex, type_infos["device_type"]) - + msg = _("Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}").\ + format(a1=index, a2=subindex, a3=type_infos["device_type"]) + raise ValueError(msg) + entry_infos = { "index": index, "subindex": subindex, @@ -467,45 +478,48 @@ "bitlen": entry["BitSize"], } entry_infos.update(type_infos) - - entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"], + + entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"], entry_declaration["infos"]))) entry_declaration["mapped"] = True - + if entry_infos["var_type"] != entry["Type"]: message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"] - if (self.Controler.GetSizeOfType(entry_infos["var_type"]) != - self.Controler.GetSizeOfType(entry["Type"])): - raise ValueError, message + if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \ + self.Controler.GetSizeOfType(entry["Type"]): + raise ValueError(message) else: self.Controler.GetCTRoot().logger.write_warning(message + "\n") - + if entry_infos["dir"] == "I" and entry["PDOMapping"] in ["T", "RT"]: pdo_type = "Inputs" elif entry_infos["dir"] == "Q" and entry["PDOMapping"] in ["R", "RT"]: pdo_type = "Outputs" else: - raise ValueError, _("Wrong direction for location \"%s\"!") % entry_infos["var_name"] - - if not dynamic_pdos.has_key(pdo_type): - raise ValueError, _("No Sync manager defined for %s!") % pdo_type - + msg = _("Wrong direction for location \"%s\"!") \ + % entry_infos["var_name"] + raise ValueError(msg) + + if pdo_type not in dynamic_pdos: + msg = _("No Sync manager defined for %s!") % pdo_type + raise ValueError(msg) + ConfigureVariable(entry_infos, str_completion) - + if len(dynamic_pdos[pdo_type]["pdos"]) > 0: pdo = dynamic_pdos[pdo_type]["pdos"][0] elif module_extra_params["add_pdo"]: while dynamic_pdos[pdo_type]["current_index"] in pdos_index: dynamic_pdos[pdo_type]["current_index"] += 1 if dynamic_pdos[pdo_type]["current_index"] >= dynamic_pdos[pdo_type]["max_index"]: - raise ValueError, _("No more free PDO index available for %s!") % pdo_type + raise ValueError(_("No more free PDO index available for %s!") % pdo_type) pdos_index.append(dynamic_pdos[pdo_type]["current_index"]) - + dynamic_pdos_number += 1 pdo = {"slave": slave_idx, "index": dynamic_pdos[pdo_type]["current_index"], "name": "Dynamic PDO %d" % dynamic_pdos_number, - "type": pdo_type, + "type": pdo_type, "entries": [], "entries_number": 0, "fixed": False} @@ -514,55 +528,55 @@ dynamic_pdos[pdo_type]["pdos"].append(pdo) else: break - + pdo["entries"].append(" {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos) if entry_infos["bitlen"] < module_extra_params["pdo_alignment"]: pdo["entries"].append(" {0x0000, 0x00, %d}, /* None */" % ( - module_extra_params["pdo_alignment"] - entry_infos["bitlen"])) + module_extra_params["pdo_alignment"] - entry_infos["bitlen"])) pdo["entries_number"] += 1 - + if pdo["entries_number"] == module_extra_params["max_pdo_size"]: dynamic_pdos[pdo_type]["pdos"].pop(0) - + pdo_offset = 0 entry_offset = 0 for sync_manager_infos in sync_managers: - + for pdo_infos in sync_manager_infos["pdos"]: pdo_infos["offset"] = entry_offset pdo_entries = pdo_infos["entries"] pdos_infos["pdos_infos"].append( - (" {0x%(index).4x, %(entries_number)d, " + + (" {0x%(index).4x, %(entries_number)d, " + "slave_%(slave)d_pdo_entries + %(offset)d}, /* %(name)s */") % pdo_infos) entry_offset += len(pdo_entries) pdos_infos["pdos_entries_infos"].extend(pdo_entries) - + sync_manager_infos["offset"] = pdo_offset pdo_offset_shift = sync_manager_infos["pdos_number"] pdos_infos["pdos_sync_infos"].append( - (" {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " + + (" {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " + ("slave_%(slave)d_pdos + %(offset)d" if pdo_offset_shift else "NULL") + ", %(watchdog)s},") % sync_manager_infos) - pdo_offset += pdo_offset_shift - + pdo_offset += pdo_offset_shift + for element in ["pdos_entries_infos", "pdos_infos", "pdos_sync_infos"]: pdos_infos[element] = "\n".join(pdos_infos[element]) - + str_completion["pdos_configuration_declaration"] += SLAVE_PDOS_CONFIGURATION_DECLARATION % pdos_infos - + for (index, subindex), entry_declaration in slave_variables.iteritems(): if not entry_declaration["mapped"]: - message = _("Entry index 0x%4.4x, subindex 0x%2.2x not mapped for device %s") % \ - (index, subindex, type_infos["device_type"]) + message = _("Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}").\ + format(a1=index, a2=subindex, a3=type_infos["device_type"]) self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n") - - for element in ["used_pdo_entry_offset_variables_declaration", - "used_pdo_entry_configuration", - "located_variables_declaration", - "retrieve_variables", + + for element in ["used_pdo_entry_offset_variables_declaration", + "used_pdo_entry_configuration", + "located_variables_declaration", + "retrieve_variables", "publish_variables"]: str_completion[element] = "\n".join(str_completion[element]) - + etherlabfile = open(filepath, 'w') etherlabfile.write(plc_etherlab_code % str_completion) etherlabfile.close() diff -r e0f16317668e -r 15f18dc8b56a etherlab/EthercatCIA402Slave.py --- a/etherlab/EthercatCIA402Slave.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/EthercatCIA402Slave.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,18 +9,19 @@ # # See COPYING file for copyrights details. +from __future__ import absolute_import import os import wx -from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY - -from MotionLibrary import Headers, AxisXSD -from EthercatSlave import _EthercatSlaveCTN, _CommonSlave -from ConfigEditor import CIA402NodeEditor +from PLCControler import LOCATION_CONFNODE, LOCATION_VAR_INPUT + +from MotionLibrary import AxisXSD +from etherlab.EthercatSlave import _EthercatSlaveCTN, _CommonSlave +from etherlab.ConfigEditor import CIA402NodeEditor # Definition of node variables that have to be mapped in PDO -# [(name, index, subindex, type, +# [(name, index, subindex, type, # direction for master ('I': input, 'Q': output)),...] NODE_VARIABLES = [ ("ControlWord", 0x6040, 0x00, "UINT", "Q"), @@ -38,12 +39,12 @@ # Definition of optional node variables that can be added to PDO mapping. # A checkbox will be displayed for each section in node configuration panel to # enable them -# [(section_name, -# [{'description', (name, index, subindex, type, +# [(section_name, +# [{'description', (name, index, subindex, type, # direction for master ('I': input, 'Q': output)), -# 'retrieve', string_template_for_retrieve_variable (None: not retrieved, +# 'retrieve', string_template_for_retrieve_variable (None: not retrieved, # default string template if not defined), -# 'publish', string_template_for_publish_variable (None: not published, +# 'publish', string_template_for_publish_variable (None: not published, # default string template if not defined), # },...] EXTRA_NODE_VARIABLES = [ @@ -74,24 +75,25 @@ # List of parameters name in no configuration panel for optional variable # sections EXTRA_NODE_VARIABLES_DICT = { - "Enable" + name: params + "Enable" + name: params for name, params in EXTRA_NODE_VARIABLES} # List of block to define to interface MCL to fieldbus for specific functions FIELDBUS_INTERFACE_GLOBAL_INSTANCES = [ - {"blocktype": "GetTorqueLimit", + {"blocktype": "GetTorqueLimit", "inputs": [], "outputs": [{"name": "TorqueLimitPos", "type": "UINT"}, {"name": "TorqueLimitNeg", "type": "UINT"}]}, - {"blocktype": "SetTorqueLimit", + {"blocktype": "SetTorqueLimit", "inputs": [{"name": "TorqueLimitPos", "type": "UINT"}, {"name": "TorqueLimitNeg", "type": "UINT"}], "outputs": []}, ] -#-------------------------------------------------- +# -------------------------------------------------- # Ethercat CIA402 Node -#-------------------------------------------------- +# -------------------------------------------------- + class _EthercatCIA402SlaveCTN(_EthercatSlaveCTN): XSD = """ @@ -104,103 +106,114 @@ """ % ("\n".join(["""\ """ % category - for category, variables in EXTRA_NODE_VARIABLES]) + AxisXSD) - + use="optional" default="false"/>""" % category + for category, variables in EXTRA_NODE_VARIABLES]) + AxisXSD) + NODE_PROFILE = 402 EditorType = CIA402NodeEditor - + ConfNodeMethods = [ - {"bitmap" : "CIA402AxisRef", - "name" : _("Axis Ref"), - "tooltip" : _("Initiate Drag'n drop of Axis ref located variable"), - "method" : "_getCIA402AxisRef", - "push": True}, - {"bitmap" : "CIA402NetPos", - "name" : _("Axis Pos"), - "tooltip" : _("Initiate Drag'n drop of Network position located variable"), - "method" : "_getCIA402NetworkPosition", - "push": True}, + { + "bitmap": "CIA402AxisRef", + "name": _("Axis Ref"), + "tooltip": _("Initiate Drag'n drop of Axis ref located variable"), + "method": "_getCIA402AxisRef", + "push": True, + }, + { + "bitmap": "CIA402NetPos", + "name": _("Axis Pos"), + "tooltip": _("Initiate Drag'n drop of Network position located variable"), + "method": "_getCIA402NetworkPosition", + "push": True, + }, ] - -#-------------------------------------------------- + +# -------------------------------------------------- # class code -#-------------------------------------------------- - +# -------------------------------------------------- + def __init__(self): + _EthercatSlaveCTN.__init__(self) + # ----------- call ethercat mng. function -------------- self.CommonMethod = _CommonSlave(self) - + def GetIconName(self): return "CIA402Slave" - + def SetParamsAttribute(self, path, value): if path == "CIA402SlaveParams.Type": path = "SlaveParams.Type" elif path == "CIA402SlaveParams.Alias": path = "SlaveParams.Alias" return _EthercatSlaveCTN.SetParamsAttribute(self, path, value) - + def GetVariableLocationTree(self): axis_name = self.CTNName() current_location = self.GetCurrentLocation() - children = [{"name": name_frmt % (axis_name), - "type": LOCATION_VAR_INPUT, - "size": "W", - "IEC_type": iec_type, - "var_name": var_name_frmt % axis_name, - "location": location_frmt % ( - ".".join(map(str, current_location))), - "description": "", - "children": []} - for name_frmt, iec_type, var_name_frmt, location_frmt in - [("%s Network Position", "UINT", "%s_pos", "%%IW%s"), - ("%s Axis Ref", "AXIS_REF", "%s", "%%IW%s.402")]] - children.extend(self.CTNParent.GetDeviceLocationTree( - self.GetSlavePos(), current_location, axis_name)) - return {"name": axis_name, - "type": LOCATION_CONFNODE, - "location": self.GetFullIEC_Channel(), - "children": children, + children = [ + { + "name": name_frmt % (axis_name), + "type": LOCATION_VAR_INPUT, + "size": "W", + "IEC_type": iec_type, + "var_name": var_name_frmt % axis_name, + "location": location_frmt % (".".join(map(str, current_location))), + "description": "", + "children": [] + } + for name_frmt, iec_type, var_name_frmt, location_frmt in [ + ("%s Network Position", "UINT", "%s_pos", "%%IW%s"), + ("%s Axis Ref", "AXIS_REF", "%s", "%%IW%s.402") + ] + ] + children.extend(self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), + current_location, + axis_name)) + return { + "name": axis_name, + "type": LOCATION_CONFNODE, + "location": self.GetFullIEC_Channel(), + "children": children, } - + def CTNGlobalInstances(self): current_location = self.GetCurrentLocation() - return [("%s_%s" % (block_infos["blocktype"], + return [("%s_%s" % (block_infos["blocktype"], "_".join(map(str, current_location))), - "EtherLab%s" % block_infos["blocktype"], "") + "EtherLab%s" % block_infos["blocktype"], "") for block_infos in FIELDBUS_INTERFACE_GLOBAL_INSTANCES] - + def StartDragNDrop(self, data): data_obj = wx.TextDataObject(str(data)) dragSource = wx.DropSource(self.GetCTRoot().AppFrame) dragSource.SetData(data_obj) dragSource.DoDragDrop() - + def _getCIA402NetworkPosition(self): self.StartDragNDrop( - ("%%IW%s" % ".".join(map(str, self.GetCurrentLocation())), + ("%%IW%s" % ".".join(map(str, self.GetCurrentLocation())), "location", "UINT", self.CTNName() + "_Pos", "")) - + def _getCIA402AxisRef(self): self.StartDragNDrop( - ("%%IW%s.402" % ".".join(map(str, self.GetCurrentLocation())), + ("%%IW%s.402" % ".".join(map(str, self.GetCurrentLocation())), "location", "AXIS_REF", self.CTNName(), "")) - + def CTNGenerate_C(self, buildpath, locations): current_location = self.GetCurrentLocation() - - location_str = "_".join(map(lambda x:str(x), current_location)) + + location_str = "_".join(map(str, current_location)) slave_pos = self.GetSlavePos() - MCL_headers = Headers - - # Open CIA402 node code template file - plc_cia402node_filepath = os.path.join(os.path.split(__file__)[0], + + # Open CIA402 node code template file + plc_cia402node_filepath = os.path.join(os.path.split(__file__)[0], "plc_cia402node.c") plc_cia402node_file = open(plc_cia402node_filepath, 'r') plc_cia402node_code = plc_cia402node_file.read() plc_cia402node_file.close() - + # Init list of generated strings for each code template file section fieldbus_interface_declaration = [] fieldbus_interface_definition = [] @@ -210,31 +223,44 @@ extern_located_variables_declaration = [] entry_variables = [] init_entry_variables = [] - + # Fieldbus interface code sections for blocktype_infos in FIELDBUS_INTERFACE_GLOBAL_INSTANCES: blocktype = blocktype_infos["blocktype"] ucase_blocktype = blocktype.upper() blockname = "_".join([ucase_blocktype, location_str]) - - extract_inputs = "\n".join(["""\ - __SET_VAR(%s->, %s,, %s);""" % (blockname, input_name, input_value) - for (input_name, input_value) in [ - ("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [ - (input["name"].upper(), + + extract_inputs = "\n".join([ + """\ + __SET_VAR(%s->, %s,, %s);""" % (blockname, input_name, input_value) + for (input_name, input_value) in + [("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [ + (input["name"].upper(), "__GET_VAR(data__->%s)" % input["name"].upper()) - for input in blocktype_infos["inputs"]] - ]) - - - return_outputs = "\n".join(["""\ - __SET_VAR(data__->,%(output_name)s,, - __GET_VAR(%(blockname)s->%(output_name)s));""" % locals() - for output_name in ["DONE", "BUSY", "ERROR"] + [ - output["name"].upper() - for output in blocktype_infos["outputs"]] - ]) - + for input in blocktype_infos["inputs"] + ]]) + + return_outputs = "\n".join([ + """\ + __SET_VAR(data__->,%(output_name)s,, + __GET_VAR(%(blockname)s->%(output_name)s));""" % { + "output_name": output_name, + "blockname": blockname + } + for output_name in ["DONE", "BUSY", "ERROR"] + [ + output["name"].upper() + for output in blocktype_infos["outputs"]] + ]) + + loc_dict = { + "ucase_blocktype": ucase_blocktype, + "blocktype": blocktype, + "blockname": blockname, + "location_str": location_str, + "extract_inputs": extract_inputs, + "return_outputs": return_outputs, + } + fieldbus_interface_declaration.append(""" extern void ETHERLAB%(ucase_blocktype)s_body__(ETHERLAB%(ucase_blocktype)s* data__); void __%(blocktype)s_%(location_str)s(MC_%(ucase_blocktype)s *data__) { @@ -244,89 +270,103 @@ %(extract_inputs)s ETHERLAB%(ucase_blocktype)s_body__(%(blockname)s); %(return_outputs)s -}""" % locals()) - +}""" % loc_dict) + fieldbus_interface_definition.append("""\ AxsPub.axis->__mcl_func_MC_%(blocktype)s = __%(blocktype)s_%(location_str)s;\ -""" % locals()) - +""" % loc_dict) + # Get a copy list of default variables to map variables = NODE_VARIABLES[:] - + # Set AxisRef public struct members value node_params = self.CTNParams[1].getElementInfos(self.CTNParams[0]) for param in node_params["children"]: param_name = param["name"] - + # Param is optional variables section enable flag extra_node_variable_infos = EXTRA_NODE_VARIABLES_DICT.get(param_name) if extra_node_variable_infos is not None: param_name = param_name.replace("Enable", "") + "Enabled" - + if not param["value"]: continue - + # Optional variables section is enabled for variable_infos in extra_node_variable_infos: var_name = variable_infos["description"][0] - + # Add each variables defined in section description to the # list of variables to map variables.append(variable_infos["description"]) - + # Add code to publish or retrive variable - for var_exchange_dir, str_list, default_template in [ - ("retrieve", extra_variables_retrieve, - " AxsPub.axis->%(var_name)s = *(AxsPub.%(var_name)s);"), - ("publish", extra_variables_publish, - " *(AxsPub.%(var_name)s) = AxsPub.axis->%(var_name)s;")]: - - template = variable_infos.get(var_exchange_dir, - default_template) + coded = [ + ("retrieve", + extra_variables_retrieve, + " AxsPub.axis->%(var_name)s = *(AxsPub.%(var_name)s);"), + ("publish", + extra_variables_publish, + " *(AxsPub.%(var_name)s) = AxsPub.axis->%(var_name)s;") + ] + for var_exchange_dir, _str_list, default_template in coded: + template = variable_infos.get(var_exchange_dir, default_template) if template is not None: extra_variables_publish.append(template % locals()) - + # Set AxisRef public struct member value if defined if param["value"] is not None: param_value = ({True: "1", False: "0"}[param["value"]] if param["type"] == "boolean" else str(param["value"])) - + init_axis_params.append("""\ - AxsPub.axis->%(param_name)s = %(param_value)s;""" % locals()) - + AxsPub.axis->%(param_name)s = %(param_value)s;""" % { + "param_value": param_value, + "param_name": param_name, + }) + # Add each variable in list of variables to map to master list of # variables to add to network configuration for name, index, subindex, var_type, dir in variables: var_size = self.GetSizeOfType(var_type) + loc_dict = { + "var_size": var_size, + "var_type": var_type, + "name:": name, + "location_str": location_str, + "index": index, + "subindex": subindex, + } var_name = """\ -__%(dir)s%(var_size)s%(location_str)s_%(index)d_%(subindex)d""" % locals() - +__%(dir)s%(var_size)s%(location_str)s_%(index)d_%(subindex)d""" % loc_dict + loc_dict["var_name"] = var_name + extern_located_variables_declaration.append( - "IEC_%(var_type)s *%(var_name)s;" % locals()) + "IEC_%(var_type)s *%(var_name)s;" % loc_dict) entry_variables.append( - " IEC_%(var_type)s *%(name)s;" % locals()) + " IEC_%(var_type)s *%(name)s;" % loc_dict) init_entry_variables.append( - " AxsPub.%(name)s = %(var_name)s;" % locals()) - + " AxsPub.%(name)s = %(var_name)s;" % loc_dict) + self.CTNParent.FileGenerator.DeclareVariable( - slave_pos, index, subindex, var_type, dir, var_name) - + slave_pos, index, subindex, var_type, dir, var_name) + # Add newline between string in list of generated strings for sections [fieldbus_interface_declaration, fieldbus_interface_definition, init_axis_params, extra_variables_retrieve, extra_variables_publish, - extern_located_variables_declaration, entry_variables, - init_entry_variables] = map(lambda l: "\n".join(l), [ - fieldbus_interface_declaration, fieldbus_interface_definition, - init_axis_params, extra_variables_retrieve, extra_variables_publish, - extern_located_variables_declaration, entry_variables, - init_entry_variables]) - + extern_located_variables_declaration, entry_variables, + init_entry_variables] = map("\n".join, [ + fieldbus_interface_declaration, fieldbus_interface_definition, + init_axis_params, extra_variables_retrieve, extra_variables_publish, + extern_located_variables_declaration, entry_variables, + init_entry_variables]) + # Write generated content to CIA402 node file - Gen_CIA402Nodefile_path = os.path.join(buildpath, - "cia402node_%s.c"%location_str) + Gen_CIA402Nodefile_path = os.path.join(buildpath, + "cia402node_%s.c" % location_str) cia402nodefile = open(Gen_CIA402Nodefile_path, 'w') cia402nodefile.write(plc_cia402node_code % locals()) cia402nodefile.close() - - return [(Gen_CIA402Nodefile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))],"",True + + return [(Gen_CIA402Nodefile_path, '"-I%s"' % os.path.abspath(self.GetCTRoot().GetIECLibPath()))], "", True diff -r e0f16317668e -r 15f18dc8b56a etherlab/EthercatMaster.py --- a/etherlab/EthercatMaster.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/EthercatMaster.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,34 +9,40 @@ # # See COPYING file for copyrights details. +from __future__ import absolute_import import os -import cPickle +from copy import deepcopy from lxml import etree -from copy import deepcopy import wx from xmlclass import * -from PLCControler import UndoBuffer, LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY +from PLCControler import UndoBuffer, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT from ConfigTreeNode import ConfigTreeNode from dialogs import BrowseValuesLibraryDialog from IDEFrame import TITLE, FILEMENU, PROJECTTREE - -from EthercatSlave import _EthercatSlaveCTN, ExtractHexDecValue, GenerateHexDecValue, TYPECONVERSION, VARCLASSCONVERSION, _CommonSlave -from EthercatCFileGenerator import _EthercatCFileGenerator -from ConfigEditor import MasterEditor from POULibrary import POULibrary +from etherlab.ConfigEditor import MasterEditor +from etherlab.EthercatCFileGenerator import _EthercatCFileGenerator +from etherlab.EthercatSlave import \ + _EthercatSlaveCTN, \ + ExtractHexDecValue, \ + GenerateHexDecValue, \ + TYPECONVERSION, \ + VARCLASSCONVERSION, \ + _CommonSlave + try: - from EthercatCIA402Slave import _EthercatCIA402SlaveCTN + from etherlab.EthercatCIA402Slave import _EthercatCIA402SlaveCTN HAS_MCL = True -except: +except Exception: HAS_MCL = False -#-------------------------------------------------- +# -------------------------------------------------- # Remote Exec Etherlab Commands -#-------------------------------------------------- +# -------------------------------------------------- SCAN_COMMAND = """ import commands @@ -64,13 +70,15 @@ returnVal = slaves """ -#-------------------------------------------------- +# -------------------------------------------------- # Etherlab Specific Blocks Library -#-------------------------------------------------- +# -------------------------------------------------- + def GetLocalPath(filename): return os.path.join(os.path.split(__file__)[0], filename) + class EtherlabLibrary(POULibrary): def GetLibraryPath(self): return GetLocalPath("pous.xml") @@ -79,30 +87,32 @@ etherlab_ext_file = open(GetLocalPath("etherlab_ext.c"), 'r') etherlab_ext_code = etherlab_ext_file.read() etherlab_ext_file.close() - + Gen_etherlabfile_path = os.path.join(buildpath, "etherlab_ext.c") - ethelabfile = open(Gen_etherlabfile_path,'w') + ethelabfile = open(Gen_etherlabfile_path, 'w') ethelabfile.write(etherlab_ext_code) ethelabfile.close() - - runtimefile_path = os.path.join(os.path.split(__file__)[0], "runtime_etherlab.py") - return ((["etherlab_ext"], [(Gen_etherlabfile_path, IECCFLAGS)], True), "", + + return ((["etherlab_ext"], [(Gen_etherlabfile_path, IECCFLAGS)], True), "", ("runtime_etherlab.py", file(GetLocalPath("runtime_etherlab.py")))) - -#-------------------------------------------------- + +# -------------------------------------------------- # Ethercat MASTER -#-------------------------------------------------- - -EtherCATConfigParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATConfig.xsd")) +# -------------------------------------------------- + + +EtherCATConfigParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATConfig.xsd")) + def sort_commands(x, y): if x["Index"] == y["Index"]: return cmp(x["Subindex"], y["Subindex"]) return cmp(x["Index"], y["Index"]) + cls = EtherCATConfigParser.GetElementClass("Slave", "Config") if cls: - + def getType(self): slave_info = self.getInfo() return {"device_type": slave_info.getName(), @@ -118,7 +128,7 @@ slave_info.setProductCode(ExtractHexDecValue(type_infos["product_code"])) slave_info.setRevisionNo(ExtractHexDecValue(type_infos["revision_number"])) setattr(cls, "setType", setType) - + def getInitCmds(self, create_default=False): Mailbox = self.getMailbox() if Mailbox is None: @@ -140,7 +150,7 @@ InitCmds = CoE.getInitCmds() return InitCmds setattr(cls, "getInitCmds", getInitCmds) - + def getStartupCommands(self): pos = self.getInfo().getPhysAddr() InitCmds = self.getInitCmds() @@ -161,7 +171,7 @@ commands.sort(sort_commands) return commands setattr(cls, "getStartupCommands", getStartupCommands) - + def appendStartupCommand(self, command_infos): InitCmds = self.getInitCmds(True) command = EtherCATConfigParser.CreateElement("InitCmd", "InitCmds", 1) @@ -172,7 +182,7 @@ command.setComment(command_infos["Description"]) return len(InitCmds.getInitCmd()) - 1 setattr(cls, "appendStartupCommand", appendStartupCommand) - + def setStartupCommand(self, command_infos): InitCmds = self.getInitCmds() if InitCmds is not None: @@ -184,7 +194,7 @@ command.setData(command_infos["Value"]) command.setComment(command_infos["Description"]) setattr(cls, "setStartupCommand", setStartupCommand) - + def removeStartupCommand(self, command_idx): InitCmds = self.getInitCmds() if InitCmds is not None: @@ -218,15 +228,16 @@ """ -ProcessVariablesParser = GenerateParserFromXSDstring(ProcessVariablesXSD) - -class _EthercatCTN: +ProcessVariablesParser = GenerateParserFromXSDstring(ProcessVariablesXSD) + + +class _EthercatCTN(object): CTNChildrenTypes = [("EthercatSlave", _EthercatSlaveCTN, "Ethercat Slave")] if HAS_MCL: CTNChildrenTypes.append(("EthercatCIA402Slave", _EthercatCIA402SlaveCTN, "Ethercat CIA402 Slave")) EditorType = MasterEditor - + def __init__(self): config_filepath = self.ConfigFileName() config_is_saved = False @@ -238,17 +249,17 @@ EtherCATConfigParser.LoadXMLString(config_xmlfile.read()) if error is None: config_is_saved = True - except Exception, e: + except Exception as e: error = e.message config_xmlfile.close() - + if error is not None: self.GetCTRoot().logger.write_error( - _("Couldn't load %s network configuration file.") % CTNName) - + _("Couldn't load %s network configuration file.") % self.CTNName()) + if self.Config is None: self.Config = EtherCATConfigParser.CreateElement("EtherCATConfig") - + process_filepath = self.ProcessVariablesFileName() process_is_saved = False self.ProcessVariables = None @@ -259,39 +270,40 @@ ProcessVariablesParser.LoadXMLString(process_xmlfile.read()) if error is None: process_is_saved = True - except Exception, e: + except Exception as e: error = e.message process_xmlfile.close() - + if error is not None: self.GetCTRoot().logger.write_error( - _("Couldn't load %s network process variables file.") % CTNName) - + _("Couldn't load %s network process variables file.") % self.CTNName()) + if self.ProcessVariables is None: self.ProcessVariables = ProcessVariablesParser.CreateElement("ProcessVariables") - + if config_is_saved and process_is_saved: self.CreateBuffer(True) else: self.CreateBuffer(False) self.OnCTNSave() - + # ----------- call ethercat mng. function -------------- self.CommonMethod = _CommonSlave(self) - + def GetIconName(self): return "Ethercat" - + def GetContextualMenuItems(self): - return [("Add Ethercat Slave", "Add Ethercat Slave to Master", self.OnAddEthercatSlave)] - + return [(_("Add Ethercat Slave"), _("Add Ethercat Slave to Master"), self.OnAddEthercatSlave)] + def OnAddEthercatSlave(self, event): app_frame = self.GetCTRoot().AppFrame - dialog = BrowseValuesLibraryDialog(app_frame, - "Ethercat Slave Type", self.GetSlaveTypesLibrary()) + dialog = BrowseValuesLibraryDialog(app_frame, + _("Ethercat Slave Type"), + self.GetSlaveTypesLibrary()) if dialog.ShowModal() == wx.ID_OK: type_infos = dialog.GetValueInfos() - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if device is not None: if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers(): ConfNodeType = "EthercatCIA402Slave" @@ -303,7 +315,7 @@ new_child._OpenView() app_frame._Refresh(TITLE, FILEMENU, PROJECTTREE) dialog.Destroy() - + def ExtractHexDecValue(self, value): return ExtractHexDecValue(value) @@ -312,17 +324,17 @@ def ConfigFileName(self): return os.path.join(self.CTNPath(), "config.xml") - + def ProcessVariablesFileName(self): return os.path.join(self.CTNPath(), "process_variables.xml") - + def FilterSlave(self, slave, vendor=None, slave_pos=None, slave_profile=None): if slave_pos is not None and slave.getInfo().getPhysAddr() != slave_pos: return False type_infos = slave.getType() if vendor is not None and ExtractHexDecValue(type_infos["vendor"]) != vendor: return False - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if slave_profile is not None and slave_profile not in device.GetProfileNumbers(): return False return True @@ -355,7 +367,7 @@ commands.append((slave.getInfo().getPhysAddr(), slave.getStartupCommands())) commands.sort() return reduce(lambda x, y: x + y[1], commands, []) - + def AppendStartupCommand(self, command_infos): slave = self.GetSlave(command_infos["Position"]) if slave is not None: @@ -363,20 +375,20 @@ self.BufferModel() return command_idx return None - + def SetStartupCommandInfos(self, command_infos): slave = self.GetSlave(command_infos["Position"]) if slave is not None: slave.setStartupCommand(command_infos) self.BufferModel() - + def RemoveStartupCommand(self, slave_pos, command_idx, buffer=True): slave = self.GetSlave(slave_pos) if slave is not None: slave.removeStartupCommand(command_idx) if buffer: self.BufferModel() - + def SetProcessVariables(self, variables): vars = [] for var in variables: @@ -406,7 +418,7 @@ vars.append(variable) self.ProcessVariables.setvariable(vars) self.BufferModel() - + def GetProcessVariables(self): variables = [] idx = 0 @@ -424,43 +436,44 @@ write_to = variable.getWriteTo() if write_to is not None: var["WriteTo"] = (write_to.getPosition(), - write_to.getIndex(), - write_to.getSubIndex()) + write_to.getIndex(), + write_to.getSubIndex()) else: var["WriteTo"] = "" variables.append(var) idx += 1 return variables - + def _ScanNetwork(self): app_frame = self.GetCTRoot().AppFrame - + execute = True if len(self.Children) > 0: - dialog = wx.MessageDialog(app_frame, - _("The current network configuration will be deleted.\nDo you want to continue?"), - _("Scan Network"), - wx.YES_NO|wx.ICON_QUESTION) + dialog = wx.MessageDialog( + app_frame, + _("The current network configuration will be deleted.\nDo you want to continue?"), + _("Scan Network"), + wx.YES_NO | wx.ICON_QUESTION) execute = dialog.ShowModal() == wx.ID_YES dialog.Destroy() - + if execute: - error, returnVal = self.RemoteExec(SCAN_COMMAND, returnVal = None) + error, returnVal = self.RemoteExec(SCAN_COMMAND, returnVal=None) if error != 0: - dialog = wx.MessageDialog(app_frame, returnVal, "Error", wx.OK|wx.ICON_ERROR) + dialog = wx.MessageDialog(app_frame, returnVal, _("Error"), wx.OK | wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy() elif returnVal is not None: for child in self.IECSortedChildren(): self._doRemoveChild(child) - + for slave in returnVal: type_infos = { "vendor": slave["vendor_id"], "product_code": slave["product_code"], - "revision_number":slave["revision_number"], + "revision_number": slave["revision_number"], } - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if device is not None: if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers(): CTNType = "EthercatCIA402Slave" @@ -470,10 +483,10 @@ self.SetSlaveAlias(slave["idx"], slave["alias"]) type_infos["device_type"] = device.getType().getcontent() self.SetSlaveType(slave["idx"], type_infos) - + if app_frame: app_frame.RefreshProjectTree() - + def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0): """ Create the confnodes that may be added as child to this node self @@ -481,7 +494,7 @@ @param CTNName: string for the name of the confnode instance """ newConfNodeOpj = ConfigTreeNode.CTNAddChild(self, CTNName, CTNType, IEC_Channel) - + slave = self.GetSlave(newConfNodeOpj.BaseParams.getIEC_Channel()) if slave is None: slave = EtherCATConfigParser.CreateElement("Slave", "Config") @@ -492,7 +505,7 @@ slave_infos.setAutoIncAddr(0) self.BufferModel() self.OnCTNSave() - + return newConfNodeOpj def _doRemoveChild(self, CTNInstance): @@ -523,38 +536,38 @@ if self._View is not None: self._View.RefreshView() self._View.RefreshBuffer() - + def GetSlaveAlias(self, slave_pos): slave = self.GetSlave(slave_pos) if slave is not None: slave_info = slave.getInfo() return slave_info.getAutoIncAddr() return None - + def SetSlaveAlias(self, slave_pos, alias): slave = self.GetSlave(slave_pos) if slave is not None: slave_info = slave.getInfo() slave_info.setAutoIncAddr(alias) self.BufferModel() - + def GetSlaveType(self, slave_pos): slave = self.GetSlave(slave_pos) if slave is not None: return slave.getType() return None - + def SetSlaveType(self, slave_pos, type_infos): slave = self.GetSlave(slave_pos) if slave is not None: slave.setType(type_infos) self.BufferModel() - + def GetSlaveInfos(self, slave_pos): slave = self.GetSlave(slave_pos) if slave is not None: type_infos = slave.getType() - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if device is not None: infos = type_infos.copy() infos.update({"physics": device.getPhysics(), @@ -562,48 +575,46 @@ "entries": self.GetSlaveVariables(device)}) return infos return None - + def GetSlaveVariables(self, slave_pos=None, limits=None, device=None): if device is None and slave_pos is not None: slave = self.GetSlave(slave_pos) if slave is not None: type_infos = slave.getType() - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if device is not None: entries = device.GetEntriesList(limits) - #print entries entries_list = entries.items() entries_list.sort() entries = [] current_index = None - current_entry = None - for (index, subindex), entry in entries_list: + current_entry = {} + for (index, _subindex), entry in entries_list: entry["children"] = [] if slave_pos is not None: entry["Position"] = str(slave_pos) - entry if index != current_index: current_index = index current_entry = entry entries.append(entry) - elif current_entry is not None: + elif current_entry: current_entry["children"].append(entry) else: entries.append(entry) return entries return [] - + def GetSlaveVariableDataType(self, slave_pos, index, subindex): slave = self.GetSlave(slave_pos) if slave is not None: - device, module_extra_params = self.GetModuleInfos(slave.getType()) + device, _module_extra_params = self.GetModuleInfos(slave.getType()) if device is not None: entries = device.GetEntriesList() entry_infos = entries.get((index, subindex)) if entry_infos is not None: return entry_infos["Type"] return None - + def GetNodesVariables(self, vendor=None, slave_pos=None, slave_profile=None, limits=None): entries = [] for slave_position in self.GetSlaves(): @@ -613,28 +624,28 @@ type_infos = slave.getType() if vendor is not None and ExtractHexDecValue(type_infos["vendor"]) != vendor: continue - device, module_extra_params = self.GetModuleInfos(type_infos) + device, _module_extra_params = self.GetModuleInfos(type_infos) if slave_profile is not None and slave_profile not in device.GetProfileNumbers(): continue entries.extend(self.GetSlaveVariables(slave_position, limits, device)) return entries - + def GetModuleInfos(self, type_infos): return self.CTNParent.GetModuleInfos(type_infos) - + def GetSlaveTypesLibrary(self, profile_filter=None): return self.CTNParent.GetModulesLibrary(profile_filter) - + def GetLibraryVendors(self): return self.CTNParent.GetVendors() - + def GetDeviceLocationTree(self, slave_pos, current_location, device_name): slave = self.GetSlave(slave_pos) - vars = [] + vars = [] if slave is not None: type_infos = slave.getType() - - device, module_extra_params = self.GetModuleInfos(type_infos) + + device, _module_extra_params = self.GetModuleInfos(type_infos) if device is not None: sync_managers = [] for sync_manager in device.getSm(): @@ -644,7 +655,7 @@ sync_managers.append(LOCATION_VAR_OUTPUT) else: sync_managers.append(LOCATION_VAR_INPUT) - + entries = device.GetEntriesList().items() entries.sort() for (index, subindex), entry in entries: @@ -655,44 +666,46 @@ if var_class == LOCATION_VAR_INPUT: var_dir = "%I" else: - var_dir = "%Q" - - vars.append({"name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, entry["Name"]), - "type": var_class, - "size": var_size, - "IEC_type": entry["Type"], - "var_name": "%s_%4.4x_%2.2x" % ("_".join(device_name.split()), index, subindex), - "location": "%s%s%s"%(var_dir, var_size, ".".join(map(str, current_location + - (index, subindex)))), - "description": "", - "children": []}) - + var_dir = "%Q" + + vars.append({ + "name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, entry["Name"]), + "type": var_class, + "size": var_size, + "IEC_type": entry["Type"], + "var_name": "%s_%4.4x_%2.2x" % ("_".join(device_name.split()), index, subindex), + "location": "%s%s%s" % (var_dir, var_size, ".".join(map(str, current_location + + (index, subindex)))), + "description": "", + "children": [], + }) + return vars - + def CTNTestModified(self): - return self.ChangesToSave or not self.ModelIsSaved() + return self.ChangesToSave or not self.ModelIsSaved() def OnCTNSave(self, from_project_path=None): config_filepath = self.ConfigFileName() - - config_xmlfile = open(config_filepath,"w") + + config_xmlfile = open(config_filepath, "w") config_xmlfile.write(etree.tostring( - self.Config, - pretty_print=True, - xml_declaration=True, + self.Config, + pretty_print=True, + xml_declaration=True, encoding='utf-8')) config_xmlfile.close() - + process_filepath = self.ProcessVariablesFileName() - - process_xmlfile = open(process_filepath,"w") + + process_xmlfile = open(process_filepath, "w") process_xmlfile.write(etree.tostring( - self.ProcessVariables, - pretty_print=True, - xml_declaration=True, + self.ProcessVariables, + pretty_print=True, + xml_declaration=True, encoding='utf-8')) process_xmlfile.close() - + self.Buffer.CurrentSaved() return True @@ -702,14 +715,14 @@ def _Generate_C(self, buildpath, locations): current_location = self.GetCurrentLocation() # define a unique name for the generated C file - location_str = "_".join(map(lambda x:str(x), current_location)) - - Gen_Ethercatfile_path = os.path.join(buildpath, "ethercat_%s.c"%location_str) - + location_str = "_".join(map(str, current_location)) + + Gen_Ethercatfile_path = os.path.join(buildpath, "ethercat_%s.c" % location_str) + self.FileGenerator = _EthercatCFileGenerator(self) - + LocationCFilesAndCFLAGS, LDFLAGS, extra_files = ConfigTreeNode._Generate_C(self, buildpath, locations) - + for idx, variable in enumerate(self.ProcessVariables.getvariable()): name = None var_type = None @@ -721,9 +734,9 @@ subindex = read_from.getSubIndex() location = current_location + (idx, ) var_type = self.GetSlaveVariableDataType(pos, index, subindex) - name = self.FileGenerator.DeclareVariable( - pos, index, subindex, var_type, "I", - self.GetProcessVariableName(location, var_type)) + name = self.FileGenerator.DeclareVariable(pos, index, subindex, + var_type, "I", + self.GetProcessVariableName(location, var_type)) if write_to is not None: pos = write_to.getPosition() index = write_to.getIndex() @@ -732,65 +745,65 @@ location = current_location + (idx, ) var_type = self.GetSlaveVariableDataType(pos, index, subindex) name = self.GetProcessVariableName(location, var_type) - self.FileGenerator.DeclareVariable( - pos, index, subindex, var_type, "Q", name, True) - + self.FileGenerator.DeclareVariable(pos, index, subindex, var_type, "Q", name, True) + self.FileGenerator.GenerateCFile(Gen_Ethercatfile_path, location_str, self.BaseParams.getIEC_Channel()) - - LocationCFilesAndCFLAGS.insert(0, - (current_location, - [(Gen_Ethercatfile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))], + + LocationCFilesAndCFLAGS.insert( + 0, + (current_location, + [(Gen_Ethercatfile_path, '"-I%s"' % os.path.abspath(self.GetCTRoot().GetIECLibPath()))], True)) LDFLAGS.append("-lethercat_rtdm -lrtdm") - + return LocationCFilesAndCFLAGS, LDFLAGS, extra_files ConfNodeMethods = [ - {"bitmap" : "ScanNetwork", - "name" : _("Scan Network"), - "tooltip" : _("Scan Network"), - "method" : "_ScanNetwork"}, + { + "bitmap": "ScanNetwork", + "name": _("Scan Network"), + "tooltip": _("Scan Network"), + "method": "_ScanNetwork", + }, ] def CTNGenerate_C(self, buildpath, locations): current_location = self.GetCurrentLocation() - + slaves = self.GetSlaves() for slave_pos in slaves: slave = self.GetSlave(slave_pos) if slave is not None: self.FileGenerator.DeclareSlave(slave_pos, slave) - + for location in locations: loc = location["LOC"][len(current_location):] slave_pos = loc[0] if slave_pos in slaves and len(loc) == 3 and location["DIR"] != "M": self.FileGenerator.DeclareVariable( slave_pos, loc[1], loc[2], location["IEC_TYPE"], location["DIR"], location["NAME"]) - - return [],"",False - -#------------------------------------------------------------------------------- + + return [], "", False + +# ------------------------------------------------------------------------------- # Current Buffering Management Functions -#------------------------------------------------------------------------------- - - """ - Return a copy of the config - """ +# ------------------------------------------------------------------------------- + def Copy(self, model): + """Return a copy of the config""" return deepcopy(model) - + def CreateBuffer(self, saved): self.Buffer = UndoBuffer( - (EtherCATConfigParser.Dumps(self.Config), - ProcessVariablesParser.Dumps(self.ProcessVariables)), + (EtherCATConfigParser.Dumps(self.Config), + ProcessVariablesParser.Dumps(self.ProcessVariables)), saved) - + def BufferModel(self): self.Buffer.Buffering( - (EtherCATConfigParser.Dumps(self.Config), + (EtherCATConfigParser.Dumps(self.Config), ProcessVariablesParser.Dumps(self.ProcessVariables))) - + def ModelIsSaved(self): if self.Buffer is not None: return self.Buffer.IsCurrentSaved() @@ -801,14 +814,13 @@ config, process_variables = self.Buffer.Previous() self.Config = EtherCATConfigParser.Loads(config) self.ProcessVariables = ProcessVariablesParser.Loads(process_variables) - + def LoadNext(self): config, process_variables = self.Buffer.Next() self.Config = EtherCATConfigParser.Loads(config) self.ProcessVariables = ProcessVariablesParser.Loads(process_variables) - + def GetBufferState(self): first = self.Buffer.IsFirst() last = self.Buffer.IsLast() return not first, not last - diff -r e0f16317668e -r 15f18dc8b56a etherlab/EthercatSlave.py --- a/etherlab/EthercatSlave.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/EthercatSlave.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,37 +9,39 @@ # # See COPYING file for copyrights details. -import wx +from __future__ import absolute_import -from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY +from PLCControler import LOCATION_CONFNODE, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY from ConfigTreeNode import ConfigTreeNode -from ConfigEditor import NodeEditor +from etherlab.ConfigEditor import NodeEditor -#------------------------------------------ -from CommonEtherCATFunction import _CommonSlave -#------------------------------------------ +# ------------------------------------------ +from etherlab.CommonEtherCATFunction import _CommonSlave +# ------------------------------------------ -TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L", - "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", - "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L"} +TYPECONVERSION = {"BOOL": "X", "SINT": "B", "INT": "W", "DINT": "D", "LINT": "L", + "USINT": "B", "UINT": "W", "UDINT": "D", "ULINT": "L", + "BYTE": "B", "WORD": "W", "DWORD": "D", "LWORD": "L"} -DATATYPECONVERSION = {"BOOL" : "BIT", "SINT" : "S8", "INT" : "S16", "DINT" : "S32", "LINT" : "S64", - "USINT" : "U8", "UINT" : "U16", "UDINT" : "U32", "ULINT" : "U64", - "BYTE" : "U8", "WORD" : "U16", "DWORD" : "U32", "LWORD" : "U64"} +DATATYPECONVERSION = {"BOOL": "BIT", "SINT": "S8", "INT": "S16", "DINT": "S32", "LINT": "S64", + "USINT": "U8", "UINT": "U16", "UDINT": "U32", "ULINT": "U64", + "BYTE": "U8", "WORD": "U16", "DWORD": "U32", "LWORD": "U64"} VARCLASSCONVERSION = {"T": LOCATION_VAR_INPUT, "R": LOCATION_VAR_OUTPUT, "RT": LOCATION_VAR_MEMORY} + def ExtractHexDecValue(value): try: return int(value) - except: + except Exception: pass try: return int(value.replace("#", "0"), 16) - except: - raise ValueError, "Invalid value for HexDecValue \"%s\"" % value + except Exception: + raise ValueError("Invalid value for HexDecValue \"%s\"" % value) + def GenerateHexDecValue(value, base=10): if base == 10: @@ -47,7 +49,8 @@ elif base == 16: return "#x%.8x" % value else: - raise ValueError, "Not supported base" + raise ValueError("Not supported base") + def ExtractName(names, default=None): if len(names) == 1: @@ -59,31 +62,31 @@ return default -#-------------------------------------------------- +# -------------------------------------------------- # Ethercat Node -#-------------------------------------------------- +# -------------------------------------------------- -class _EthercatSlaveCTN: +class _EthercatSlaveCTN(object): NODE_PROFILE = None EditorType = NodeEditor - + def __init__(self): # ----------- call ethercat mng. function -------------- self.CommonMethod = _CommonSlave(self) - + def GetIconName(self): return "Slave" - + def ExtractHexDecValue(self, value): return ExtractHexDecValue(value) - + def GetSizeOfType(self, type): return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None) - + def GetSlavePos(self): return self.BaseParams.getIEC_Channel() - - def GetParamsAttributes(self, path = None): + + def GetParamsAttributes(self, path=None): if path: parts = path.split(".", 1) if self.MandatoryParams and parts[0] == self.MandatoryParams[0]: @@ -96,64 +99,71 @@ params.append(self.CTNParams[1].getElementInfos(self.CTNParams[0])) else: params.append({ - 'use': 'required', - 'type': 'element', - 'name': 'SlaveParams', - 'value': None, + 'use': 'required', + 'type': 'element', + 'name': 'SlaveParams', + 'value': None, 'children': [] }) - + slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) - params[0]['children'].insert(0, - {'use': 'optional', - 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE), - 'name': 'Type', - 'value': (slave_type["device_type"], slave_type)}) - params[0]['children'].insert(1, - {'use': 'optional', - 'type': 'unsignedLong', - 'name': 'Alias', - 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())}) + params[0]['children'].insert( + 0, + { + 'use': 'optional', + 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE), + 'name': 'Type', + 'value': (slave_type["device_type"], slave_type) + }) + params[0]['children'].insert( + 1, + { + 'use': 'optional', + 'type': 'unsignedLong', + 'name': 'Alias', + 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos()) + }) return params - + def SetParamsAttribute(self, path, value): self.GetSlaveInfos() position = self.BaseParams.getIEC_Channel() - + if path == "SlaveParams.Type": self.CTNParent.SetSlaveType(position, value) slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) value = (slave_type["device_type"], slave_type) - #if self._View is not None: - #wx.CallAfter(self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos()) - #self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos() - #self._View.EtherCATManagementTreebook.PDOMonitoringPanel.PDOInfoUpdate() - #self._View.EtherCATManagementTreebook.SmartView.Create_SmartView() + # if self._View is not None: + # wx.CallAfter(self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos()) + # self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos() + # self._View.EtherCATManagementTreebook.PDOMonitoringPanel.PDOInfoUpdate() + # self._View.EtherCATManagementTreebook.SmartView.Create_SmartView() return value, True elif path == "SlaveParams.Alias": self.CTNParent.SetSlaveAlias(position, value) return value, True - + value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value) - + # Filter IEC_Channel, Slave_Type and Alias that have specific behavior if path == "BaseParams.IEC_Channel" and value != position: self.CTNParent.SetSlavePosition(position, value) - + return value, refresh - + def GetSlaveInfos(self): return self.CTNParent.GetSlaveInfos(self.GetSlavePos()) - + def GetSlaveVariables(self, limits): return self.CTNParent.GetSlaveVariables(self.GetSlavePos(), limits) - + def GetVariableLocationTree(self): - return {"name": self.BaseParams.getName(), - "type": LOCATION_CONFNODE, - "location": self.GetFullIEC_Channel(), - "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) + return { + "name": self.BaseParams.getName(), + "type": LOCATION_CONFNODE, + "location": self.GetFullIEC_Channel(), + "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) } def CTNGenerate_C(self, buildpath, locations): - return [],"",False + return [], "", False diff -r e0f16317668e -r 15f18dc8b56a etherlab/etherlab.py --- a/etherlab/etherlab.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/etherlab.py Fri Nov 23 00:33:04 2018 +0100 @@ -9,36 +9,42 @@ # # See COPYING file for copyrights details. -import os, shutil +from __future__ import absolute_import +import os +import shutil +import csv from lxml import etree import wx -import csv from xmlclass import * -from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage -from PLCControler import UndoBuffer, LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY - -from EthercatSlave import ExtractHexDecValue, ExtractName -from EthercatMaster import _EthercatCTN -from ConfigEditor import LibraryEditor, ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE +from ConfigTreeNode import XSDSchemaErrorMessage + +from etherlab.EthercatSlave import ExtractHexDecValue, ExtractName +from etherlab.EthercatMaster import _EthercatCTN +from etherlab.ConfigEditor import LibraryEditor, ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE ScriptDirectory = os.path.split(os.path.realpath(__file__))[0] -#-------------------------------------------------- +# -------------------------------------------------- # Ethercat ConfNode -#-------------------------------------------------- - -EtherCATInfoParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATInfo.xsd")) -EtherCATInfo_XPath = lambda xpath: etree.XPath(xpath) +# -------------------------------------------------- + +EtherCATInfoParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATInfo.xsd")) + + +def EtherCATInfo_XPath(xpath): + return etree.XPath(xpath) + def HexDecValue(context, *args): return str(ExtractHexDecValue(args[0][0])) + def EntryName(context, *args): - return ExtractName(args[0], - args[1][0] if len(args) > 1 else None) + return ExtractName(args[0], args[1][0] if len(args) > 1 else None) + ENTRY_INFOS_KEYS = [ ("Index", lambda x: "#x%4.4X" % int(x), "#x0000"), @@ -52,18 +58,19 @@ ("PDO name", str, ""), ("PDO type", str, "")] -class EntryListFactory: + +class EntryListFactory(object): def __init__(self, entries): self.Entries = entries - + def AddEntry(self, context, *args): index, subindex = map(lambda x: int(x[0]), args[:2]) new_entry_infos = { key: translate(arg[0]) if len(arg) > 0 else default for (key, translate, default), arg in zip(ENTRY_INFOS_KEYS, args)} - + if (index, subindex) != (0, 0): entry_infos = self.Entries.get((index, subindex)) if entry_infos is not None: @@ -74,17 +81,19 @@ else: self.Entries[(index, subindex)] = new_entry_infos + entries_list_xslt = etree.parse( os.path.join(ScriptDirectory, "entries_list.xslt")) cls = EtherCATInfoParser.GetElementClass("DeviceType") if cls: - + profile_numbers_xpath = EtherCATInfo_XPath("Profile/ProfileNo") + def GetProfileNumbers(self): return [number.text for number in profile_numbers_xpath(self)] setattr(cls, "GetProfileNumbers", GetProfileNumbers) - + def getCoE(self): mailbox = self.getMailbox() if mailbox is not None: @@ -94,20 +103,20 @@ def GetEntriesList(self, limits=None): entries = {} - + factory = EntryListFactory(entries) - + entries_list_xslt_tree = etree.XSLT( - entries_list_xslt, extensions = { + entries_list_xslt, extensions={ ("entries_list_ns", "AddEntry"): factory.AddEntry, ("entries_list_ns", "HexDecValue"): HexDecValue, ("entries_list_ns", "EntryName"): EntryName}) entries_list_xslt_tree(self, **dict(zip( - ["min_index", "max_index"], + ["min_index", "max_index"], map(lambda x: etree.XSLT.strparam(str(x)), limits if limits is not None else [0x0000, 0xFFFF]) ))) - + return entries setattr(cls, "GetEntriesList", GetEntriesList) @@ -121,12 +130,13 @@ ("Control Byte", sync_manager.getControlByte()), ("Enable", sync_manager.getEnable())]: if value is None: - value ="" + value = "" sync_manager_infos[name] = value sync_managers.append(sync_manager_infos) return sync_managers setattr(cls, "GetSyncManagers", GetSyncManagers) + def GroupItemCompare(x, y): if x["type"] == y["type"]: if x["type"] == ETHERCAT_GROUP: @@ -137,107 +147,122 @@ return -1 return 1 + def SortGroupItems(group): for item in group["children"]: if item["type"] == ETHERCAT_GROUP: SortGroupItems(item) group["children"].sort(GroupItemCompare) -class ModulesLibrary: + +class ModulesLibrary(object): MODULES_EXTRA_PARAMS = [ - ("pdo_alignment", { - "column_label": _("PDO alignment"), - "column_size": 150, - "default": 8, - "description": _( -"Minimal size in bits between 2 pdo entries")}), - ("max_pdo_size", { - "column_label": _("Max entries by PDO"), - "column_size": 150, - "default": 255, - "description": _( -"""Maximal number of entries mapped in a PDO -including empty entries used for PDO alignment""")}), - ("add_pdo", { - "column_label": _("Creating new PDO"), - "column_size": 150, - "default": 0, - "description": _( -"""Adding a PDO not defined in default configuration + ( + "pdo_alignment", + { + "column_label": _("PDO alignment"), + "column_size": 150, + "default": 8, + "description": _("Minimal size in bits between 2 pdo entries") + } + ), + ( + "max_pdo_size", + { + "column_label": _("Max entries by PDO"), + "column_size": 150, + "default": 255, + "description": _("""Maximal number of entries mapped in a PDO +including empty entries used for PDO alignment""") + } + ), + ( + "add_pdo", + { + "column_label": _("Creating new PDO"), + "column_size": 150, + "default": 0, + "description": _("""Adding a PDO not defined in default configuration for mapping needed location variables -(1 if possible)""")}) +(1 if possible)""") + } + ) ] - + def __init__(self, path, parent_library=None): self.Path = path if not os.path.exists(self.Path): os.makedirs(self.Path) self.ParentLibrary = parent_library - + if parent_library is not None: self.LoadModules() else: self.Library = None self.LoadModulesExtraParams() - + def GetPath(self): return self.Path - + def GetModulesExtraParamsFilePath(self): return os.path.join(self.Path, "modules_extra_params.cfg") - + groups_xpath = EtherCATInfo_XPath("Descriptions/Groups/Group") devices_xpath = EtherCATInfo_XPath("Descriptions/Devices/Device") + def LoadModules(self): self.Library = {} - + files = os.listdir(self.Path) for file in files: filepath = os.path.join(self.Path, file) if os.path.isfile(filepath) and os.path.splitext(filepath)[-1] == ".xml": self.modules_infos = None - + xmlfile = open(filepath, 'r') try: self.modules_infos, error = EtherCATInfoParser.LoadXMLString(xmlfile.read()) if error is not None: self.GetCTRoot().logger.write_warning( XSDSchemaErrorMessage % (filepath + error)) - except Exception, exc: + except Exception as exc: self.modules_infos, error = None, unicode(exc) xmlfile.close() - + if self.modules_infos is not None: vendor = self.modules_infos.getVendor() - + vendor_category = self.Library.setdefault( - ExtractHexDecValue(vendor.getId()), - {"name": ExtractName(vendor.getName(), _("Miscellaneous")), + ExtractHexDecValue(vendor.getId()), + {"name": ExtractName(vendor.getName(), _("Miscellaneous")), "groups": {}}) - + for group in self.groups_xpath(self.modules_infos): group_type = group.getType() - - vendor_category["groups"].setdefault(group_type, - {"name": ExtractName(group.getName(), group_type), - "parent": group.getParentGroup(), - "order": group.getSortOrder(), - #"value": group.getcontent()["value"], - "devices": []}) - + + vendor_category["groups"].setdefault( + group_type, + { + "name": ExtractName(group.getName(), group_type), + "parent": group.getParentGroup(), + "order": group.getSortOrder(), + # "value": group.getcontent()["value"], + "devices": [], + }) + for device in self.devices_xpath(self.modules_infos): device_group = device.getGroupType() - if not vendor_category["groups"].has_key(device_group): - raise ValueError, "Not such group \"%\"" % device_group + if device_group not in vendor_category["groups"]: + raise ValueError("Not such group \"%s\"" % device_group) vendor_category["groups"][device_group]["devices"].append( (device.getType().getcontent(), device)) - + else: - + self.GetCTRoot().logger.write_error( - _("Couldn't load %s XML file:\n%s") % (filepath, error)) - + _("Couldn't load {a1} XML file:\n{a2}").format(a1=filepath, a2=error)) + return self.Library def GetModulesLibrary(self, profile_filter=None): @@ -290,32 +315,32 @@ def GetVendors(self): return [(vendor_id, vendor["name"]) for vendor_id, vendor in self.Library.items()] - + def GetModuleInfos(self, module_infos): vendor = ExtractHexDecValue(module_infos["vendor"]) vendor_infos = self.Library.get(vendor) if vendor_infos is not None: - for group_name, group_infos in vendor_infos["groups"].iteritems(): + for _group_name, group_infos in vendor_infos["groups"].iteritems(): for device_type, device_infos in group_infos["devices"]: product_code = ExtractHexDecValue(device_infos.getType().getProductCode()) revision_number = ExtractHexDecValue(device_infos.getType().getRevisionNo()) - if (product_code == ExtractHexDecValue(module_infos["product_code"]) and - revision_number == ExtractHexDecValue(module_infos["revision_number"])): - self.cntdevice = device_infos - self.cntdeviceType = device_type + if product_code == ExtractHexDecValue(module_infos["product_code"]) and \ + revision_number == ExtractHexDecValue(module_infos["revision_number"]): + self.cntdevice = device_infos + self.cntdeviceType = device_type return device_infos, self.GetModuleExtraParams(vendor, product_code, revision_number) return None, None - + def ImportModuleLibrary(self, filepath): if os.path.isfile(filepath): shutil.copy(filepath, self.Path) self.LoadModules() return True return False - + def LoadModulesExtraParams(self): self.ModulesExtraParams = {} - + csvfile_path = self.GetModulesExtraParamsFilePath() if os.path.exists(csvfile_path): csvfile = open(csvfile_path, "rb") @@ -329,53 +354,54 @@ has_header = False else: params_values = {} - for (param, param_infos), value in zip( - self.MODULES_EXTRA_PARAMS, row[3:]): + for (param, _param_infos), value in zip( + self.MODULES_EXTRA_PARAMS, row[3:]): if value != "": params_values[param] = int(value) self.ModulesExtraParams[ tuple(map(int, row[:3]))] = params_values csvfile.close() - + def SaveModulesExtraParams(self): csvfile = open(self.GetModulesExtraParamsFilePath(), "wb") - extra_params = [param for param, params_infos in self.MODULES_EXTRA_PARAMS] + extra_params = [param for param, _params_infos in self.MODULES_EXTRA_PARAMS] writer = csv.writer(csvfile, delimiter=';') writer.writerow(['Vendor', 'product_code', 'revision_number'] + extra_params) for (vendor, product_code, revision_number), module_extra_params in self.ModulesExtraParams.iteritems(): - writer.writerow([vendor, product_code, revision_number] + - [module_extra_params.get(param, '') + writer.writerow([vendor, product_code, revision_number] + + [module_extra_params.get(param, '') for param in extra_params]) csvfile.close() - + def SetModuleExtraParam(self, vendor, product_code, revision_number, param, value): vendor = ExtractHexDecValue(vendor) product_code = ExtractHexDecValue(product_code) revision_number = ExtractHexDecValue(revision_number) - + module_infos = (vendor, product_code, revision_number) self.ModulesExtraParams.setdefault(module_infos, {}) self.ModulesExtraParams[module_infos][param] = value - + self.SaveModulesExtraParams() - + def GetModuleExtraParams(self, vendor, product_code, revision_number): vendor = ExtractHexDecValue(vendor) product_code = ExtractHexDecValue(product_code) revision_number = ExtractHexDecValue(revision_number) - + if self.ParentLibrary is not None: extra_params = self.ParentLibrary.GetModuleExtraParams(vendor, product_code, revision_number) else: extra_params = {} - + extra_params.update(self.ModulesExtraParams.get((vendor, product_code, revision_number), {})) - + for param, param_infos in self.MODULES_EXTRA_PARAMS: extra_params.setdefault(param, param_infos["default"]) - + return extra_params + USERDATA_DIR = wx.StandardPaths.Get().GetUserDataDir() if wx.Platform != '__WXMSW__': USERDATA_DIR += '_files' @@ -383,51 +409,50 @@ ModulesDatabase = ModulesLibrary( os.path.join(USERDATA_DIR, "ethercat_modules")) -class RootClass: - - CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")] + +class RootClass(object): + + CTNChildrenTypes = [("EthercatNode", _EthercatCTN, "Ethercat Master")] EditorType = LibraryEditor - - + def __init__(self): self.ModulesLibrary = None self.LoadModulesLibrary() - + def GetIconName(self): return "Ethercat" - + def GetModulesLibraryPath(self, project_path=None): if project_path is None: project_path = self.CTNPath() - return os.path.join(project_path, "modules") - + return os.path.join(project_path, "modules") + def OnCTNSave(self, from_project_path=None): if from_project_path is not None: shutil.copytree(self.GetModulesLibraryPath(from_project_path), self.GetModulesLibraryPath()) return True - + def CTNGenerate_C(self, buildpath, locations): - return [],"",False - + return [], "", False + def LoadModulesLibrary(self): if self.ModulesLibrary is None: self.ModulesLibrary = ModulesLibrary(self.GetModulesLibraryPath(), ModulesDatabase) else: self.ModulesLibrary.LoadModulesLibrary() - + def GetModulesDatabaseInstance(self): return ModulesDatabase - + def GetModulesLibraryInstance(self): return self.ModulesLibrary - + def GetModulesLibrary(self, profile_filter=None): return self.ModulesLibrary.GetModulesLibrary(profile_filter) - + def GetVendors(self): return self.ModulesLibrary.GetVendors() - + def GetModuleInfos(self, module_infos): return self.ModulesLibrary.GetModuleInfos(module_infos) - diff -r e0f16317668e -r 15f18dc8b56a etherlab/runtime_etherlab.py --- a/etherlab/runtime_etherlab.py Thu Nov 22 23:39:54 2018 +0100 +++ b/etherlab/runtime_etherlab.py Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,14 @@ -import os,subprocess,sys,ctypes +from __future__ import absolute_import +import os +import signal +import subprocess +import ctypes from threading import Thread -import ctypes,time,re -from targets.typemapping import LogLevelsDict +import time +import re + +import runtime.PLCObject as PLCObject +from runtime.loglevels import LogLevelsDict SDOAnswered = PLCBinary.SDOAnswered SDOAnswered.restype = None @@ -11,18 +18,19 @@ SDOProc = None Result = None + def SDOThreadProc(*params): global Result, SDOProc if params[0] == "upload": cmdfmt = "ethercat upload -p %d -t %s 0x%.4x 0x%.2x" else: cmdfmt = "ethercat download -p %d -t %s 0x%.4x 0x%.2x %s" - + command = cmdfmt % params[1:] SDOProc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) res = SDOProc.wait() output = SDOProc.communicate()[0] - + if params[0] == "upload": Result = None if res == 0: @@ -36,73 +44,78 @@ Result = int(dec_value) else: Result = res == 0 - + SDOAnswered() - if res != 0 : + if res != 0: PLCObject.LogMessage( - LogLevelsDict["WARNING"], - "%s : %s"%(command,output)) - + LogLevelsDict["WARNING"], + "%s : %s" % (command, output)) + + def EthercatSDOUpload(pos, index, subindex, var_type): global SDOThread SDOThread = Thread(target=SDOThreadProc, args=["upload", pos, var_type, index, subindex]) SDOThread.start() - + + def EthercatSDODownload(pos, index, subindex, var_type, value): global SDOThread SDOThread = Thread(target=SDOThreadProc, args=["download", pos, var_type, index, subindex, value]) SDOThread.start() + def GetResult(): - global Result return Result -KMSGPollThread=None -StopKMSGThread=False + +KMSGPollThread = None +StopKMSGThread = False + + def KMSGPollThreadProc(): """ Logs Kernel messages starting with EtherCAT Uses GLibc wrapper to Linux syscall "klogctl" - Last 4 KB are polled, and lines compared to last + Last 4 KB are polled, and lines compared to last captured line to detect new lines """ - global StopKMSGThread - libc=ctypes.CDLL("libc.so.6") + libc = ctypes.CDLL("libc.so.6") klog = libc.klogctl klog.argtypes = [ctypes.c_int, ctypes.c_char_p, ctypes.c_int] klog.restype = ctypes.c_int - s=ctypes.create_string_buffer(4*1024) + s = ctypes.create_string_buffer(4*1024) last = None while not StopKMSGThread: - l = klog(3,s,len(s)-1) - log = s.value[:l-1] - if last : + bytes_to_read = klog(3, s, len(s)-1) + log = s.value[:bytes_to_read-1] + if last: log = log.rpartition(last)[2] - if log : + if log: last = log.rpartition('\n')[2] - for lvl,msg in re.findall( - r'<(\d)>\[\s*\d*\.\d*\]\s*(EtherCAT\s*.*)$', - log, re.MULTILINE): + for lvl, msg in re.findall( + r'<(\d)>\[\s*\d*\.\d*\]\s*(EtherCAT\s*.*)$', + log, re.MULTILINE): PLCObject.LogMessage( LogLevelsDict[{ - "4":"WARNING", - "3":"CRITICAL"}.get(lvl,"DEBUG")], + "4": "WARNING", + "3": "CRITICAL"}.get(lvl, "DEBUG")], msg) - time.sleep(0.5) + time.sleep(0.5) + def _runtime_etherlab_init(): global KMSGPollThread, StopKMSGThread StopKMSGThread = False - KMSGPollThread = Thread(target = KMSGPollThreadProc) + KMSGPollThread = Thread(target=KMSGPollThreadProc) KMSGPollThread.start() + def _runtime_etherlab_cleanup(): - global KMSGPollThread, StopKMSGThread, SDOProc, SDOThread + global KMSGPollThread, StopKMSGThread, SDOThread try: - os.kill(SDOProc.pid, SIGTERM) - except: + os.kill(SDOProc.pid, signal.SIGTERM) + except Exception: pass SDOThread = None StopKMSGThread = True KMSGPollThread = None - diff -r e0f16317668e -r 15f18dc8b56a i18n/.tx/config --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/.tx/config Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,10 @@ +[main] +host = https://www.transifex.com + +[beremiz-ide.beremiz] +file_filter = Beremiz_.po +minimum_perc = 0 +source_file = messages.pot +source_lang = en +type = PO + diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_bn_BD.po --- a/i18n/Beremiz_bn_BD.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_bn_BD.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,16 +1,15 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Adhir Dutta , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Adhir Dutta , 2017\n" "Language-Team: Bengali (Bangladesh) (https://www.transifex.com/beremiz/teams/75746/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -19,7 +18,7 @@ "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -44,151 +43,156 @@ "\n" "উপাত্তসমূহ:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr "বাহ্যিক" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "ইনআউট" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "ইনপুট" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr "স্থানীয়" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "আউটপুট" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "সাময়িক" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr "এবং %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "উত্পাদন ব্যর্থ !\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "\"%s\" Data Type অস্তিত্বহীন !!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "\"%s\" POU ইতিমধ্যেই বিদ্যমান !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "\"%s\" POU এর অস্তিত্ব নেই !!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" স্বীয়কার্যে ব্যবহার অযোগ্য! " -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" config ইতিমধ্যেই বিদ্যমান!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "\"%s\" configuration ইতিমধ্যেই বিদ্যমান !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "\"%s\" data type ইতিমধ্যেই বিদ্যমান! " -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "\"%s\" এই pou এর উপাদান ইতিমধ্যেই বিদ্যমান!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "\"%s\" ফোল্ডারটিতে বেরিমিজ প্রকল্প নেই\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" একটি কি-ওয়ার্ড। তাই ব্যবহার অযোগ্য!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" একটি অযৌক্তিক সংখ্যা!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" যৌক্তিক ফ্লোল্ডার নয়!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" একটি অযৌক্তিক শনাক্তকারী!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "\"%s\" এক বা একাধিক POU তে ব্যবহৃত। আপনি কি কাজ করবেন?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\" POU ইতিমধ্যেই বিদ্যমান!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "\"%s\" step ইতিমধ্যেই বিদ্যমান!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" মান ইতিমধ্যেই সংজ্ঞায়িত!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" সাংখ্যমানটি অ্যারের জন্য অযৌক্তিক মাত্রা!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -197,209 +201,205 @@ "\"%s\" সাংখ্যমানটি অ্যারের জন্য অযৌক্তিক মাত্রা!\n" "ডানের সাংখ্যমান অবশ্যই বামের চেয়ে বড় হতে হবে." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "\"{a1}\" ফাংশন বাতিল \"{a2}\" তে POU: কোনও ইনপুট প্রযুক্ত হয়নি" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" ইতিমধ্যেই \"{a2}\" দ্বারা ব্যবহৃত!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "\"{a1}\" এর সম্পদ ইতিমধ্যেই \"{a2}\" এর configuration এ বিদ্যমান !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "\"{a1}\" এর সম্পদ \"{a2}\" এর configuration এ ব্যবহৃত হয়নি !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gমিসে" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dদি" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dঘ" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dমি" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dমিসে" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%dসে" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s Data Types" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%sPOUs" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s Profile" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "%sপ্রধান অংশে প্রতিলিপি নেই!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%sপ্রধান অংশে text নেই!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "" +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "" + #: ../IDEFrame.py:356 -msgid "&Configuration" -msgstr "" - -#: ../IDEFrame.py:345 -msgid "&Data Type" -msgstr "" - -#: ../IDEFrame.py:390 -msgid "&Delete" -msgstr "" - -#: ../IDEFrame.py:337 -msgid "&Display" -msgstr "" - -#: ../IDEFrame.py:336 -msgid "&Edit" -msgstr "" - -#: ../IDEFrame.py:335 -msgid "&File" -msgstr "" - -#: ../IDEFrame.py:347 -msgid "&Function" -msgstr "" - -#: ../IDEFrame.py:338 -msgid "&Help" -msgstr "" - -#: ../dialogs/AboutDialog.py:72 -msgid "&License" -msgstr "" - -#: ../IDEFrame.py:351 msgid "&Program" msgstr "" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr "" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr "" - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " "to continue?" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "" @@ -409,26 +409,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "" @@ -436,125 +436,125 @@ msgid "Absolute number" msgstr "" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "" -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "" @@ -562,44 +562,44 @@ msgid "Addition" msgstr "" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "" @@ -619,8 +619,8 @@ msgid "Arithmetic" msgstr "" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "" @@ -628,45 +628,37 @@ msgid "Assignment" msgstr "" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "" @@ -698,85 +690,85 @@ msgid "Bitwise inverting" msgstr "" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "" @@ -784,34 +776,34 @@ msgid "CANopen support" msgstr "" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "" @@ -821,46 +813,50 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "" @@ -868,115 +864,119 @@ msgid "Character string" msgstr "" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "" @@ -984,7 +984,7 @@ msgid "Comparison" msgstr "" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "" @@ -992,93 +992,93 @@ msgid "Concatenation" msgstr "" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "" @@ -1098,20 +1098,20 @@ msgid "Conversion to time-of-day" msgstr "" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "" @@ -1119,137 +1119,133 @@ msgid "Cosine" msgstr "" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" "{a3}\n" msgstr "" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "" -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" " {a2}" msgstr "" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" " {a2}" msgstr "" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "" -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "" @@ -1261,19 +1257,19 @@ msgid "DEPRECATED" msgstr "" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "" @@ -1294,66 +1290,58 @@ msgid "Date subtraction" msgstr "" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "" @@ -1361,47 +1349,47 @@ msgid "Deletion (within)" msgstr "" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "" @@ -1409,120 +1397,120 @@ msgid "Division" msgstr "" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "" +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + #: ../dialogs/LDElementDialog.py:56 -msgid "Edit Coil Values" -msgstr "" - -#: ../dialogs/LDElementDialog.py:54 msgid "Edit Contact Values" msgstr "" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "" @@ -1530,85 +1518,91 @@ msgid "Equal to" msgstr "" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" "%s\n" msgstr "" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "" @@ -1620,77 +1614,77 @@ msgid "Exponentiation" msgstr "" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "" @@ -1698,93 +1692,89 @@ msgid "Find position" msgstr "" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "" @@ -1796,110 +1786,114 @@ msgid "Greater than or equal to" msgstr "" +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + #: ../controls/ProjectPropertiesPanel.py:135 -msgid "Grid Resolution:" -msgstr "" - -#: ../runtime/NevowServer.py:182 -msgid "HTTP interface port :" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:121 msgid "Height:" msgstr "" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "" @@ -1907,114 +1901,124 @@ msgid "Insertion (into)" msgstr "" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "" -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "" @@ -2030,11 +2034,11 @@ msgid "Less than or equal to" msgstr "" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "" @@ -2042,27 +2046,27 @@ msgid "Limitation" msgstr "" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "" @@ -2070,12 +2074,12 @@ msgid "Logarithm to base 10" msgstr "" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "" @@ -2083,11 +2087,15 @@ msgid "Map located variables over CANopen" msgstr "" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" @@ -2096,29 +2104,29 @@ msgid "Maximum" msgstr "" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "" @@ -2126,78 +2134,82 @@ msgid "Minimum" msgstr "" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "" @@ -2209,26 +2221,26 @@ msgid "Multiplication" msgstr "" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "" @@ -2236,105 +2248,105 @@ msgid "Natural logarithm" msgstr "" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "" +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + #: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 msgid "Nevow/Athena import failed :" msgstr "" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." msgstr "" -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "" -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2343,7 +2355,7 @@ msgid "Not equal to" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "" @@ -2351,399 +2363,399 @@ msgid "Numerical" msgstr "" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "" -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "" -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "" -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" "{a2}" msgstr "" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" "Beremiz is an " msgstr "" -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" msgstr "" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "" -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "" @@ -2751,56 +2763,56 @@ msgid "Remainder (modulo)" msgstr "" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "" @@ -2808,43 +2820,43 @@ msgid "Replacement (within)" msgstr "" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "" @@ -2860,114 +2872,114 @@ msgid "Rounding up/down" msgstr "" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "" -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" @@ -2975,23 +2987,23 @@ msgid "Selection" msgstr "" +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:65 -msgid "Selection Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:64 msgid "Selection Divergence" msgstr "" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "" @@ -3003,27 +3015,27 @@ msgid "Shift right" msgstr "" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "" +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Simultaneous Divergence" msgstr "" @@ -3031,15 +3043,15 @@ msgid "Sine" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3050,60 +3062,56 @@ msgid "Square root (base 2)" msgstr "" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "" @@ -3111,19 +3119,19 @@ msgid "Subtraction" msgstr "" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "" @@ -3131,19 +3139,19 @@ msgid "Tangent" msgstr "" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3155,39 +3163,39 @@ "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "" @@ -3225,94 +3233,94 @@ msgid "Time-of-day subtraction" msgstr "" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "" @@ -3321,269 +3329,315 @@ msgid "Type conversion" msgstr "" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "" -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" msgstr "" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" msgstr "" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "" @@ -3599,24 +3653,24 @@ msgid "string right of" msgstr "" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "" -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "" -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" @@ -3681,6 +3735,72 @@ msgid "Win32" msgstr "" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "" @@ -3855,7 +3975,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" msgid "The output produces a single pulse when a rising edge is detected." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_de_DE.po --- a/i18n/Beremiz_de_DE.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_de_DE.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,15 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Andrey Skvortsov , 2017 -# Hendrik Knackstedt , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Hendrik Knackstedt , 2017\n" "Language-Team: German (Germany) (https://www.transifex.com/beremiz/teams/75746/de_DE/)\n" "MIME-Version: 1.0\n" @@ -20,7 +18,7 @@ "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -45,153 +43,158 @@ "\n" "Traceback:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " Extern" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "EinAusgang" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "Eingang" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " Lokal" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "Ausgang" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr " Temp" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr "und %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr " Erstellung fehlgeschlagen !\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" -msgstr "Datentyp \"%s\" existiert bereits !!!" - -#: ../plcopen/plcopen.py:904 +msgstr "Datentyp \"%s\" existiert nicht !!!" + +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "Baustein \"%s\" existiert bereits !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "Baustein \"%s\" existiert nicht !!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" kann sich nicht selbst aufrufen!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "Konfiguration \"%s\" existiert bereits!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "Konfiguration \"%s\" existiert bereits !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "Konfiguration \"%s\" existiert nicht !!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "Datentyp \"%s\" existiert bereits!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "\"%s\" Element ist für diesen Baustein bereits vorhanden!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "Verzeichnis \"%s\" ist kein korrektes Beremiz-Projekt\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" ist ein Schlüsselwort. Es kann nicht verwendet werden!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" ist ein ungültiger Wert!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" ist kein Ordner!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" ist kein gültiger Bezeichner!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "" "\"%s\" wird von einer oder mehreren Bausteinen benutzt. Wollen Sie " "fortfahren?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "Baustein \"%s\" existiert bereits!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "Schritt \"%s\" existiert bereits!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "Wert \"%s\" bereits definiert!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "Wert \"%s\" ist keine gültige Array-Größe!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -200,200 +203,196 @@ "Wert \"%s\" ist keine gültige Array-Größe!\n" "Der rechte Wert muss größer sein als der linke." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "Funktion \"{a1}\" in \"{a2}\" abgebrochen POU: Nicht mit Eingang verbunden" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" wird von \"{a2}\" bereits benutzt?" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "Ressource \"{a1}\" existiert in Konfiguration \"{a2}\" bereits !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "Ressource \"{a1}\" existiert in Konfiguration \"{a2}\" nicht !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03g ms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%d T" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%d S" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%d M" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%d ms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%d s" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s Datentypen" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s Bausteine" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s Profil" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "Baustein \"%s\" besitzt keine Instanzen!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "Baustein \"%s\" ist leer!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Element hinzufügen" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Schließen" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Konfiguration" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Datentyp" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Löschen" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Ansicht" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Bearbeiten" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Datei" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Funktion" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Hilfe" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Lizenz" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Programm" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Einstellungen" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&Zuletzt verwendete Projekte" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Ressource" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} Übereinstimmung im Projekt" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} Übereinstimmungen im Projekt" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' befindet sich unter {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d Ergebnisse)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1T" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1S" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -402,9 +401,9 @@ "Ein POU enthält ein Element mit dem Namen \"%s\". Das könnte eine Kollision " "sein. Möchten Sie fortfahren?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "Baustein mit dem Namen \"%s\" existiert bereits!" @@ -414,26 +413,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Ein Kind mit dem Namen \"{a1}\" existiert bereits -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Bitte wählen Sie einen Ort aus!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Task mit dem gleichen Namen existiert bereits!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Variable mit den Namen \"%s\" existiert bereits im Baustein!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Variable mit dem Namen \"%s\" existiert bereits!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "Über" @@ -441,125 +440,125 @@ msgid "Absolute number" msgstr "Absolute Zahl" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Aktion" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Aktionsblock" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Aktionname" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Aktionname:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "Aktion mit dem Namen %s existiert nicht!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Aktionen" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Aktionen:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Aktiv" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Hinzufügen" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Aktion hinzufügen" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "Synchron ausführenden C-Code hinzufügen" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Konfiguration hinzufügen" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Datentyp hinzufügen" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Zweig hinzufügen" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "IP hinzufügen" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "Baustein hinzufügen" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Asynchron auszuführenden Python-Code hinzufügen" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Ressource hinzufügen" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Transitionsbedingung hinzufügen" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Drahtsegment hinzufügen " -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Den ersten Schritt hinzufügen" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Neuen Sprung hinzufügen" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Neuen Schritt hinzufügen" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Einfache WxGlade basierte GUI hinzufügen." -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Aktion hinzufügen" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Komponent hinzufügen" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Instanz hinzufügen" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Slave hinzufügen" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Task hinzufügen" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Variable hinzufügen" @@ -567,44 +566,44 @@ msgid "Addition" msgstr "Addition" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "Zusätzliche Bausteine" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Bausteingröße anpassen" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Ausrichtung" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Alle" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Alle Dateien (*.*)|*.*|CSV Dateien (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Bereits verbunden. Bitte Verbindung trennen\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Komponent mit den Namen \"%s\" existiert bereits in der Struktur!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Instanz mit dem gleichen Namen existiert bereits!" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "Umbenennen alle Fortsetzungen mit dem gleichen Namen" @@ -624,8 +623,8 @@ msgid "Arithmetic" msgstr "Arithmetik" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Array" @@ -633,45 +632,37 @@ msgid "Assignment" msgstr "Zuordnung" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Mindestens eine Variable oder ein Ausdruck muss ausgewählt werden!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Autor" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Autor (optional):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Zurück" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Schlechter Domainname (Endlosschleife) für" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Schlechter Domainname für" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "Fehlerhafte location size : %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Basistyp:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Basistypen" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -703,85 +694,85 @@ msgid "Bitwise inverting" msgstr "bitweises NICHT" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Funktionsblock" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Funktionsblockeigenschaften" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Blockname" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Unten" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "Gebrochen" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "Wert für %s wählen" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "Verfügbare IEC-Adressen:" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "Build" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "Build-Verzeichnis bereits sauber\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "Build-Projekt nach Build-Verzeichnis" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "C Build abgestürzt !\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "C Build fehlgeschlagen.\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "C code" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "C Code erfolgreich generiert.\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "C Kompilierung fehlgeschlagen.\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "C Kompilierung von %s fehlgeschlagen.\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "C-Erweiterung" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "&Beiträge" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "CANOpen Netzwerk" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "CANOpen slave" @@ -789,34 +780,34 @@ msgid "CANopen support" msgstr "CANopen support" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "Abarbeitungsreihenfolge kann nur für FUP Bausteine bestimmt werden!" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "EIC-Nur lokale oder globale Variable können eine zugeordnet sein." -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "Code-Erzeugung zur Datei \"%s\" ist fehlgeschlagen!" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "IEC-Adresse für eine Funktionsbausteininstanz ist nicht erlaubt " -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "Projekt kann nicht in die Datei %s gespeichert werden!" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "Anfangswert für eine Funktionsbausteininstanz ist nicht erlaubt" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "Kann nicht Kind {a1} vom Typ {a2} erstellen" @@ -826,15 +817,15 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "Kann keinen niedrigeren IEC-Kanal als %d finden\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "Kann den SPS-Status nicht einlesen - Verbindung gescheitert.\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "Kann die Datei VARIABLES.csv nicht öffnen/lesen!\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " @@ -843,31 +834,35 @@ "Kann Bit-Offset für nicht-bool '{a1}' Variable (ID: {a2}, Idx: {a3}, sIdx: " "{a4})) nicht setzen" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "Case-sensitive" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "Zentriert" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "Ändere IP-Adresse des zu verbindenden Interfaces." -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Ändere Name" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "Bausteintyp konvertieren nach" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "Ändere Port-Nummer" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "Ändere Arbeitsverzeichnis" @@ -875,119 +870,123 @@ msgid "Character string" msgstr "Zeichenkette" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Wählen Sie eine SVG-Datei" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Wählen Sie ein Verzeichnis um das Projekt zu speichern" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Datei auswählen" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Wähle Projekt" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Wählen Sie den Wert für %s:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Wähle Arbeitsverzeichnis" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Wählen Sie leeres Verzeichnis für neues Projekt" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" "Ausgewählter Ordner beinhaltet kein Programm. Es handelt sich dabei nicht um" " ein gültiges Projekt!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" "Gewählter Ordner ist nicht leer. Sie können diesen nicht für ein neues " "Projekt verwenden!" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Klasse" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Klassenfilter:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Klasse:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Aufräumen" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Protokoll zurücksetzen" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Projekt-Build-Verzeichnis leeren" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Build-Verzeichnis leeren\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Fehlermeldungen zurücksetzen" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Ausführungsreihenfolge zurücksetzen" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Schließen" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Anwendung beenden" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Projekt schließen" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Reiter schließen" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Spule" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Kommentar" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Community Unterstützung" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Firmenname" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Firmenname (erforderlich):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "Firmenwebseite (optional):" @@ -995,7 +994,7 @@ msgid "Comparison" msgstr "Vergleich" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "Kompilliere IEC Programm zu c-Code...\n" @@ -1003,93 +1002,93 @@ msgid "Concatenation" msgstr "Konkatenation" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Konfiguration" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Konfigurationsvariablen" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Konfiguration" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Konfigurationen" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Variablennamen bestätigen oder anpassen" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Verbinden" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Mit Ziel-SPS verbinden" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Verbunden mit URI: %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Verbindung" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Verbindungseigenschaften" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "Verbindung abgebrochen!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "Verbindung zu %s gescheitert!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Verbindung verloren!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Verbindung zu '%s' gescheitert.\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Anschluss" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Anschlüsse:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Konsole" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Konstante" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Kontakt" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Beschreibung (optional):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Fortsetzung" @@ -1109,20 +1108,20 @@ msgid "Conversion to time-of-day" msgstr "Umwandlung in Tageszeit" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Kopieren" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "Baustein kopieren" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Datei vom linken Ordner nach den rechten kopieren" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Datei vom rechten Ordner nach den linken kopieren" @@ -1130,7 +1129,7 @@ msgid "Cosine" msgstr "Kosinus" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1139,12 +1138,12 @@ "Kind \"{a1}\", Typ {a2} konnte nicht hinzugefügt werden:\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Die alte Datei %s konnte nicht importiert weden." -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1153,7 +1152,7 @@ "Confnode Basis-Parameter {a1} konnten nicht geladen werden :\n" "{a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1162,111 +1161,107 @@ "Confnode Parameter {a1} konnten nicht geladen werden :\n" "{a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Nur Bausteine können eingefügt werden." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "Konnte SPS nicht starten !\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "Konnte SPS nicht anhalten !\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Debugger kann nicht gestoppt werden.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "HMI erstellen" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Neuer Baustein" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Neue Aktion" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Neuer Aktionsblock" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Neuer Funktionsblock" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Neuer Zweig" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Neue Spule" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Neuer Kommentar" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Neue Verbindung" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Neuer Kontakt" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Neue Verzweigung" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Neue Verzweigung" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Erster Schritt" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Neuer Sprung" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Neue Stomleitung" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Neues KOP-Netzwerk" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Neuer Schritt" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Neue Transitionsbedingung" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Erstellen eine neue Variable" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Mitwirkende" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Arbeitsverzeichnis :" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Ausschneiden" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Zyklisch" @@ -1278,19 +1273,19 @@ msgid "DEPRECATED" msgstr "VERALTET" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "DS-301 Profil" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "DS-302 Profil" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Datentyp" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Datentypen" @@ -1311,68 +1306,60 @@ msgid "Date subtraction" msgstr "Datumssubstraktion" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Tage:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Debug entspricht der SPS nicht - stoppen/übertragen/starten um Debug wieder " "zu aktivieren\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Debuginstanz" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Debug: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Debug: Unbekannte Variable '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Debug: Datentyp '%s' ist nicht unterstützt\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Debugger" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Debugger deaktiviert\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Debugger ist bereit\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Debugger ist gestoppt.\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Löschen" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Zweig löschen" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "Datei löschen" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Kabelabschnitt löschen" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Object löschen" @@ -1380,47 +1367,47 @@ msgid "Deletion (within)" msgstr "Löschen (innerhalb)" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "Referenz:" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "Beschreibung" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Beschreibung:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Dimensionen:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Richtung" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Richtung:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Direkt" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Verbindung trennen" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Verbindung zu SPS trennen" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Getrennt" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Verzweigung" @@ -1428,121 +1415,121 @@ msgid "Division" msgstr "Division" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Möchten Sie die Datei '%s' wirklich löschen?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Dokumentation" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Fertig" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Zeitangabe" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS Dateien (*.eds)|*.eds|Alle Dateien|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Funktionsblock bearbeiten" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Spule bearbeiten" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Kontaktwerte bearbeiten" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Zeitangabe ändern" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Schritt bearbeiten" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "Eine wxWidgets GUI mit wxGlade bearbeiten" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Aktionsblockeigenschaften bearbeiten" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Array-Typeigenschaften bearbeiten" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Kommentar bearbeiten" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Datei bearbeiten" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Objekt bearbeiten" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Sprungziel bearbeiten" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" "Bearbeite hinzugefügten Roh-IEC Code, der vom PLCGenerator generiert wurde" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Schrittname bearbeiten" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Transitionsbedingung bearbeiten" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Werkzeugleiste bearbeiten" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Editor-Auswahl" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Komponente:" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Leer" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Wiederherstellen/Rückgängig aktivieren" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Leere Dimension ist nicht erlaubt." + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Geben Sie einen Namen ein" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Geben Sie eine Port-Nummer ein" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Geben Sie die IP-Adresse des anzubindenden Interfaces ein" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Aufzählung" @@ -1550,37 +1537,36 @@ msgid "Equal to" msgstr "Gleich" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Fehler" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" @@ -1588,12 +1574,12 @@ "Fehler : Mindestens eine Konfiguration und eine Ressource müssen in der SPS " "deklariert sein!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Fehler : IEC nach C Compiler gab folgendes zurück: %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1602,37 +1588,44 @@ "Fehler in ST/AWL/AS Code-Generator :\n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "Fehler während der Speicherung von \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "Fehler: Slave Export fehlgeschlagen\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "Fehler: Kein Master angelegt\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "Fehler: Kein SPS built\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "Fehler beim verbinden von %s!\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "Ausführungssteuerung:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Ausführungsreihenfolge:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "Experimentelle web-basierte HMI" @@ -1644,77 +1637,77 @@ msgid "Exponentiation" msgstr "Exponentialfunktion des Operanden" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "CanOpen-Slave in EDS-Datei exportieren" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "Graphenwerte in Zwischenablage exportieren" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "Slave exportieren" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "Ausdruck:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "External" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "Extrahiere gefundene Variablen...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FUP" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "Fehler : Sie müssen kompillieren vor dem Transfer.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "Fallende Flanke" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "schwerer Fehler : Kann den Builder nicht finden.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "Lade %s" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "Das Feld %s enthält keinen gültigen Wert!" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "Die Felder %s enthalten keine gültigen Werte!" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "Datei '%s' existiert bereits!" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "Suchen" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "Weiter suchen" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "Rückwärts suchen" @@ -1722,93 +1715,89 @@ msgid "Find position" msgstr "Position suchen" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "Suchen:" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "Erzwinge neues laden der Runtime\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "Wert forcen" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "Variable forcen" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "Formular unvollständig. %s muss ausgefüllt werden!" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "Formular unvollständig. Der Name muss ausgefüllt werden!" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "Formular unvollständig. Bausteintyp muss ausgewählt werden!" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "Vorwärts" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "Funktion" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "Funktions&block" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "Funktionsblock" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "Funktionsblocktypen" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "Funktionsblöcke" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "Funktionsblock kann nicht in Funktion verwendet werden!" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "Funktionsblock \"%s\" kann nicht in eine Funktion eingefügt werden!!!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "Funktionen" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "Programm generieren" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "Generiere SoftPLC IEC-61131 ST/AWL/AS Code...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "Global" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "Zum aktuellen Wert wechseln" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "Grafiken" @@ -1820,110 +1809,114 @@ msgid "Greater than or equal to" msgstr "Größer oder gleich" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "Gitterauflösung:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "HTTP interface port :" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "Höhe:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "Homeverzeichnis:" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "Horizontal:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "Stunden:" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "AWL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "IP ist nicht gültig!" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "Importiere SVG" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "Ein- und Ausgang" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "Inaktiv" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "Inkompatible Datentypen zwischen \"{a1}\" und \"{a2}\"" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "Inkompatible Datengröße zwischen \"%s\" und \"BOOL\"" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "Inkompatible Datengröße zwischen \"{a1}\" und \"{a2}\"" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Indikator" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "Anfangswert" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "Anfangsschritt" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "Anfangswert" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "Anfangswert:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "Inline" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "Eingang" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "Eingänge:" @@ -1931,64 +1924,70 @@ msgid "Insertion (into)" msgstr "Einfügen String in ein anderes String an die entsprechende Position" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "Eine Instanz mit der ID%d existiert nicht!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "Instanzen:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "Schnittstelle" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "Ereignisgesteuert" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "Intervall" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "Ungültige plcopen-Element(en)!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für \"{a4}\"" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für die Adresse \"{a4}\"" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für die Adresse \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "Ungültiger Wert \"%s\" für Debug-Variable" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "Ungültiger Wert \"%s\" " -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "Ungültiger Wert \"%s\"" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "Ungültiger Wert \"{a1}\" für Variable \"{a2}\"!" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1996,51 +1995,55 @@ "Ungültiger Wert!\n" "Bitte geben eine Zahl ein." -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Sprung" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "KOP" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "KOP-Element mit id %d ist auf mehr als einem Netzwerk." -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Sprache" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Sprache (optional):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Sprache:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "Letzter Build entspricht bereits dem Ziel. Übertrage trotzdem...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "Starte WX GUI Inspector" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Starte eine live-Python shell" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Links" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Linke Stromleitung" @@ -2056,11 +2059,11 @@ msgid "Less than or equal to" msgstr "Kleiner oder gleich" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Bibliotheke" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Lizenz" @@ -2068,27 +2071,27 @@ msgid "Limitation" msgstr "Limitierung" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "Linking :\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Lokal" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Lokale Einträge" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "Lokale Service discovery fehlgeschlagen!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "IEC-Adresse" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "Verfügbare IEC-Adressen:" @@ -2096,12 +2099,12 @@ msgid "Logarithm to base 10" msgstr "Logarithmus zur Basis 10" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "MDNS-Auflösungsfehler für '%s'\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Map Variable" @@ -2109,11 +2112,15 @@ msgid "Map located variables over CANopen" msgstr "Variablen über CANopen mappen" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Master" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "Maximale Anzahl ({a1}) ist erreicht für diesen confnode des Typs {a2}" @@ -2122,29 +2129,29 @@ msgid "Maximum" msgstr "Maximum" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Maximum:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Speicher" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "Menüleiste" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Mikrosekunden:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Mitte" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Millisekunden:" @@ -2152,78 +2159,82 @@ msgid "Minimum" msgstr "Minimum" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Minimum:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Minuten:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Sonstiges" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Modifikator:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "Mehr als ein Anschluss gefunden zu Fortsetzung \"{a1}\" im Baustein \"{a2}\"" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Aktion nach unten schieben" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Aktion nach oben schieben" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Verschieben nach unten" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Komponent nach unten schieben" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Komponent nach oben schieben" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Insanz nach unten schieben" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Instanz nach oben schieben" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Verschieben Task nach unten" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Verschieben Task nach oben" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Ansicht verschieben" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Verschieben nach oben" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Verschieben Variable nach unten" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Verschieben Variable nach oben" @@ -2235,26 +2246,26 @@ msgid "Multiplication" msgstr "Multiplikation" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Mein Rechner:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NAME" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Name" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Name darf nicht NULL sein!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Name:" @@ -2262,46 +2273,46 @@ msgid "Natural logarithm" msgstr "Natürlicher Logarithmus" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Negiert" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " msgstr "Nevow Web-Dienst fehlgeschlagen." -#: ../Beremiz_service.py:556 +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" msgstr "Nevow/Athena-Import gescheitert :" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Neu" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Neuer Eintrag" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "Kein Modifikator" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "Keine SPS zu übertragen (war das Kompillieren erfolgreich ?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "Baustein \"%s\" ist leer" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "Kein Anschluss gefunden zu Fortsetzung \"{a1}\" im Baustein \"{a2}\"" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2309,12 +2320,12 @@ "Keine Dokumentation.\n" "Coming soon." -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "Keine Informationen für Block \"%s\" sind gefunden" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " @@ -2323,48 +2334,48 @@ "Keine Ausgabe {a1} Variable gefunden im Block {a2} im Baustein {a3}. " "Verbindung muss gebrochen werden" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "Keine Suchergebnisse." -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "Kein SVG-File namens: %s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "Kein Index/Subindex ({a1},{a2}) - (Variable {a3})" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "Kein Index/Subindex ({a1},{a2}) in ID : {a3} (Variable {a4})" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "Kein gültiger Wert ausgewählt!" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "Keine Variable ist im Baustein \"%s\" definiert." -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "Nicht existierende Node ID : {a1} (Variable {a2})" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "Non-Retain" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Normal" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2374,7 +2385,7 @@ msgid "Not equal to" msgstr "Ungleich" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Anzahl der Verzweigungen:" @@ -2382,24 +2393,24 @@ msgid "Numerical" msgstr "Numerisch" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "Bei Änderung" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Nur Elemente" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Öffnen" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "öffne Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." @@ -2408,67 +2419,67 @@ "Entwicklungsumgebung mit ständig wachsender Reihe von Erweiterungen und " "flexibler SPS-Runtime." -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "Datei-Browser zum Verwalten der Projektdateien öffnen" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "WxGlade öffnen" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Option" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Optionen" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Organisation (optional):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Anderes Profil" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Ausgang" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO Empfangen" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO Senden" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "SPS :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "SPS-Protokoll" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "SPS-Code-Erzeugung fehlgeschlagen !\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "SPS ist leer oder bereits gestartet." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "SPS ist nicht gestartet." -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2477,15 +2488,15 @@ "SPS-Syntaxfehler in Zeile {a1}:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen Dateien (*.xml)|*.xml|Alle Dateien|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2495,205 +2506,205 @@ "\n" "Beremiz ist " -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "PORT" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "Bausteinname" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "Bausteinname:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "Bausteintyp" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "Bausteintyp:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "PYRO Verbindung zu URI : %s\n" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO mit Zertifikaten aus '%s'\n" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Seitenformat" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Seitengröße (optional):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Seite: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Elterninstanz" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Einfügen" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "Baustein einfügen" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Zu suchendes Muster:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Anschlussnummer:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Bitte wählen Sie ein Ziel" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "Bitte geben Sie einen Blocknamen ein" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "Bitte geben Sie einen Kommentartext ein" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "Bitte geben Sie einen Schrittnamen ein" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "Bitte geben Sie Text ein" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "Bitte geben Sie einen Wert für die Variable \"%s\" ein:" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "Port Nummer darf folgenden Wertbereich haben: 0 <= port <= 65535!" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "Port Nummer muß eine natürliche Zahl sein (Integer)!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "Stromleitung" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "Stromleitungeigenschaften" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "Vorschau" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "Vorschau:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Drucken" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "Druckvorschau" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Priorität" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Priorität:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "Problem mit SPS-Start : Fehler %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Produktname" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Produktname (erforderlich):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "Produkt-Release (optional):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "Produktversion" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "Produktversion (erforderlich):" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Programm" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "Programm wurde erfolgreich generiert!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Programme" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "Programme können nicht von anderen Bausteinen verwendet werden!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Projekt" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "Projekt '%s':" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "Projektdateien" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "Projektname" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "Projektname (erforderlich):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "Projektversion (optional):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2701,90 +2712,90 @@ "Syntax-Fehler in Projektdatei:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "Projekteigenschaften" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "Projektbaum stimmt nicht mit confnode.xml {a1}! ={a2} überein" -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "Andere Anschlüße umbenennen" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "Eigenschaften" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "Service im lokalen Netzwerk veröffentlichen" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "Pyroausnahme: %s\n" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "Pyro uri :" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "Pyro port :" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Python code" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Python Datei" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "Qualifier" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "Beenden" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "Bereich:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "Raw IEC code" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "Knoten '%s' wirklich löschen?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "Wiederherstellen" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "Referenz" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "Refresh" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Regulärer Ausdruck" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "Reguläre Ausdrücke" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "Forcen aufheben" @@ -2792,56 +2803,56 @@ msgid "Remainder (modulo)" msgstr "Rest (modulo)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "Knoten %s löschen" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "Datentyp löschen" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "Baustein löschen" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "Aktion löschen" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "Komponent löschen" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "Entfernen Datei aus dem linken Ordner" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "Instanz löschen" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Slave löschen" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "Task löschen" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "Variable löschen" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "Umbenennen" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "Datei ersetzen" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "Kabel durch Verbindungen ersetzen" @@ -2849,43 +2860,43 @@ msgid "Replacement (within)" msgstr "Ersetzung (innerhalb)" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "Reset" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "Ausführungsreihenfolge zurücksetzen" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "Perspektive zurücksetzen" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "Suchergebniss säubern" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Ressourcen" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "Retain" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "Rückgabetyp:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "Rechts" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "Rechte Stromleitung" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "Steigende Flanke" @@ -2901,116 +2912,116 @@ msgid "Rounding up/down" msgstr "Auf-/Abrunden" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "Starte" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "C-Code-Erzeugung für Runtime IO-Erweiterungen fehlgeschlagen !\n" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "C-Code-Erzeugung für Runtime Bibliothek fehlgeschlagen !\n" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "SDO Client" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "SDO Server" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "AS" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" "AS-Sprung in der Baustein \"{a1}\" bezieht sich auf nicht vorhandene AS-" "Schritt \"{a2}\"" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "AS Transition im Baustein \"%s\" muss angeschlossen sein." -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST Dateien (*.st)|*.st|Alle Dateien|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG Dateien (*.svg)|*.svg|Alle Dateien|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Speichern" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Speichern unter..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Speichern unter" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "Speicherpfad ist der gleiche, wie der Pfad von dem Projekt!\n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Geltungsbereich" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Suchen" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Im Projekt suchen " -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Sekunden:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Alles auswählen" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Wählen Sie eine Variablenklasse:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Wählen Sie einen Editor:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Wählen Sie eine Instanz" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Wählen Sie ein Objekt" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" "Das ausgewählte Verzeichnis enthält bereits ein Projekt. Überschreiben?\n" @@ -3019,23 +3030,23 @@ msgid "Selection" msgstr "Auswahl" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "Alternativeende" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "Alternativanfang" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Service Discovery" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Service verfügbar:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Menge" @@ -3047,27 +3058,27 @@ msgid "Shift right" msgstr "Bitweises Rechts-Shift eines Operanden" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "Zeige IEC Code, der vom PLCGenerator erzeugt wurde" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Zeige Master" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Zeige Master, der von den config_utils generiert wurde." -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Zeige Code" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "Parallelende" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "Parallelanfang" @@ -3075,15 +3086,15 @@ msgid "Sine" msgstr "Sinus" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Ereignis" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "Quellecode hat sich nicht verändert, Build ist nicht nötig.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3096,60 +3107,56 @@ msgid "Square root (base 2)" msgstr "Quadratwurzel (Basis 2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "Standardfunktionsblock" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "Starte SPS" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Zeige build in %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Gestartet" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "starte SPS\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Statusleiste" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Schritt" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Stop" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "Stop SPS" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Halte laufende SPS an" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Gestoppt" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Debugger wird gestoppt...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Struktur" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Unterbereichstyp" @@ -3157,19 +3164,19 @@ msgid "Subtraction" msgstr "Subtraktion" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Erfolgreicher Build.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "Perspektive wechseln" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "Syntaxfehler im regulären Ausdruck des zu suchenden Musters!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "TYPE" @@ -3177,19 +3184,19 @@ msgid "Tangent" msgstr "Tangente" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Task" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Tasks:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Temp" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3211,7 +3218,7 @@ "Hier können Sie die Liste abonnieren:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3220,15 +3227,15 @@ "Die Datei '%s' existiert bereits.\n" "Möchten Sie es ersetzen?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "Die Gruppe von Blöcken muss konsistent sein!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Es wurden Änderungen gemacht, wollen Sie speichern?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " @@ -3237,7 +3244,7 @@ "Baustein mit dem Namen \"%s\" existiert bereits. Das könnte eine Kollision " "sein. Möchten Sie fortfahren?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3245,11 +3252,11 @@ "Es gab ein Problem beim Drucken.\n" "Vielleicht ist der Drucker nicht richtig eingestellt." -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Diese Option is noch nicht verfügbar!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "Takt: %d" @@ -3287,36 +3294,36 @@ msgid "Time-of-day subtraction" msgstr "Tageszeitsubstraktion" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "Wert umschalten" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "Oben" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Übertragen" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "SPS übertragen" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Übertragung erfolgreich beendet.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Übertragung gescheitert\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Transition" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " @@ -3325,22 +3332,22 @@ "Transition \"%s\" muss eine Ausgangsvariable oder Spule enthalten, die sich " "auf seinen Namen bezieht" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "Transitionsbedingungsname" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "Transitionsbedingungsname:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" "Transition mit Inhalt \"{a1}\" im Baustein \"{a2}\" ist nicht mit dem " "nächsten Schritt verbunden" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " @@ -3349,38 +3356,38 @@ "Transition mit Inhalt \"{a1}\" im Baustein \"{a2}\" ist nicht mit dem " "vorherigen Schritt verbunden" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "Eine Transition mit dem Namen %s existiert nicht!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "Transitionen" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "Übersetzt von" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "Taskttyp" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "Twisted is nicht verfügbar." -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Typ" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "Datentyp und abgeleitete Datentypen" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "Typenkonflikt für Ort \"%s\"" @@ -3389,179 +3396,233 @@ msgid "Type conversion" msgstr "Typumwandlung" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "Typinfo:" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "Nur Datentyp" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Typ:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "Unmöglich, PDO-Mapping für %02x zu definieren" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr " %s-Ermittlung für Xenomai fehlgeschlagen\n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "Undefinierter Bausteintyp \"{a1}\" im Baustein \"{a2}\"" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "Undefinierter Bausteintyp \"%s\"" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Rückgängig" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Unbekannt" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Unbekannte Variable \"%s\" für diesen Baustein!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "Unbenannt" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Unbenannt%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Nicht erkannte Datengröße \"%s\"" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Benutzerdefinierte Datentypen" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "Benutzertyp" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "Benutzerbausteine" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Wert" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Werte:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Variable" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "Variable Drop" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Variableneigenschaften" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Variablenklasse" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "Variable gehört nicht zu dieser POU!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Variable:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Variablen" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Vertikal:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "WAMP-Cliet-Start fehlgeschlagen." -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "WAMP Verbindung zu URL : %s\n" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "WAMP Verbindungs-timeout" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "WAMP Verbindung zu '%s' gescheitert.\n" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "WAMP-Import fehlgeschlagen :" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Warnung" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Warnungen im ST/IL/SFC Code Generator :\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Ganze Projekt" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Breite:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "Nach dem Ende zum Anfang" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Geschrieben von" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3569,7 +3630,7 @@ "Sie haben keine Schreibberechtigung.\n" "soll Inkscape trotzdem geöffnet werden ?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3577,7 +3638,7 @@ "Sie haben keine Schreibberechtigung.\n" "Soll wxGlade dennoch geöffnet werden ?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3585,7 +3646,7 @@ "Sie müssen Berechtigungen besitzen um mit diesem Projekt arbeiten zu können\n" "Wollen Sie dieses Projekt stattdessen kopieren ?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" @@ -3593,74 +3654,66 @@ "Sie müssen den Block oder die Gruppe von Blöcken auswählen, um die ein Zweig" " hinzugefügt werden soll!" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "" "Bitte wählen Sie den Draht aus, wo ein Kontakt hinzugefügt werden soll!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "Sie müssen einen Namen eingeben!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "Sie müssen einen Wert eingeben!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "Zoom" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "Tage" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "Fehler: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "Beendet mit Status {a1} (pid {a2})\n" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "Datei : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "Funktion" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "Funktion : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "Funktionsblock" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "Stunden" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "Zeile :" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "matiec ist nicht gefunden\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "Millisekunden" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "Minuten" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "Programm" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "Sekunden" @@ -3676,24 +3729,24 @@ msgid "string right of" msgstr "Zeichen rechts von" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "Updateinformation ist nicht verfügbar." -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "Warnung: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "{a1} \"{a2}\" kann nicht eingefügt werden als {a3}." -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" "XML-Datei {a1} folgt nicht XSD-Schema an der Zeile {a2}:\n" @@ -3760,6 +3813,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "BaseParams" @@ -3943,7 +4062,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" "Das Semaphor bietet einen Mechanismus, um Software-Elementen gegenseitig " "ausschließlichen Zugriff auf bestimmte Ressourcen zu ermöglichen." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_es_ES.po --- a/i18n/Beremiz_es_ES.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_es_ES.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,19 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Marcial González de Armas , 2017 -# Carlos Guilarte , 2017 -# Nelson Mambre , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Nelson Mambre , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Yegor Yefremov , 2018\n" "Language-Team: Spanish (Spain) (https://www.transifex.com/beremiz/teams/75746/es_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +18,7 @@ "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -36,161 +33,166 @@ "Traceback:\n" msgstr "" "\n" -"Ha ocurrido un error desconocido (bug). El informe de error fué guardado en:\n" +"Ha ocurrido un error desconocido (bug). El informe de error fue guardado en:\n" "(%s)\n" "\n" -"Por favor si es tan amable envié el archivo de error a:\n" +"Por favor, si es tan amable, envíe el archivo de error a:\n" "beremiz-devel@lists.sourceforge.net\n" "\n" "Debe reiniciar el programa.\n" "\n" "Rastreo:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr "Externa" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "EntradaSalida" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "Entrada" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " Local" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "Salida" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "Temporal" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" -msgstr "" - -#: ../ProjectController.py:1151 +msgstr "y %s" + +#: ../ProjectController.py:1182 msgid " generation failed !\n" -msgstr "Generación fallida!\n" - -#: ../plcopen/plcopen.py:886 +msgstr "¡Generación fallida!\n" + +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" -msgstr "\"%s\" Tipo de dato no existente !!!" - -#: ../plcopen/plcopen.py:904 +msgstr "¡El Tipo de dato \"%s\" no existe!" + +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" -msgstr "\"%s\" POU ya existente !!!" - -#: ../plcopen/plcopen.py:925 +msgstr "¡El POU \"%s\" ya existe!" + +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" -msgstr "\"%s\" POU no existente !!!" - -#: ../editors/Viewer.py:247 +msgstr "¡El POU \"%s\" no existe!" + +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" -msgstr "\"%s\" no puede usarse a si mismo!" - -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +msgstr "¡\"%s\" no puede usarse a sí mismo!" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" -msgstr "\"%s\" config ya existente!" - -#: ../plcopen/plcopen.py:472 +msgstr "¡La configuración \"%s\" ya existe!" + +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" -msgstr "\"%s\" configuración ya existente !!!" - -#: ../IDEFrame.py:1605 +msgstr "¡La configuración \"%s\" ya existe!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "¡La configuración %s no existe!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" -msgstr "\"%s\" tipo de dato ya existente!" - -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +msgstr "¡El tipo de dato \"%s\" ya existe!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" -msgstr "\"%s\" elemento para esta POU ya existente!" - -#: ../BeremizIDE.py:897 +msgstr "¡Ya existe un elemento \"%s\" para este POU!" + +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" -msgstr "\"%s\" carpeta no válida para el proyecto Beremiz\n" - -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +msgstr "La carpeta \"%s\" no contiene un proyecto Beremiz válido\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" -msgstr "\"%s\" es una palabra clave. No puede ser usada!" - -#: ../plcopen/plcopen.py:2417 +msgstr "\"%s\" es una palabra reservada. ¡No puede ser usada!" + +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" -msgstr "\"%s\" es un valor inválido!" - -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +msgstr "¡\"%s\" es un valor inválido!" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" -msgstr "\"%s\" no es una carpeta válida" - -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +msgstr "¡\"%s\" no es una carpeta válida!" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" -msgstr "\"%s\" no es un identificador válido" - -#: ../IDEFrame.py:2410 +msgstr "¡\"%s\" no es un identificador válido!" + +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" -msgstr "\"%s\" es usado por uno o más POUs. Deseas continuar?" - -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +msgstr "\"%s\" es usado por uno o más POUs. ¿Deseas continuar?" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\" POU ya existe!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" -msgstr "" - -#: ../editors/DataTypeEditor.py:550 +msgstr "¡El paso \"%s\" ya existe!" + +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" valor ya definido\"" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" -msgstr "\"%s\" no es una dimensión válida para el array!" - -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +msgstr "¡\"%s\" no es una dimensión válida para el arreglo!" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -199,200 +201,198 @@ "\"%s\" no es una dimensión válida para el array!\n" "El valor de la derecha debe ser mayor que el de la izquierda." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" -msgstr "\"{a1}\" llamada a la función en \"{a2}\" POU: No hay entrada conectada" - -#: ../editors/Viewer.py:251 +msgstr "" +"\"{a1}\" llamada a la función en \"{a2}\" POU: No hay ninguna entrada " +"conectada" + +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" -msgstr "\"{a1}\" ya está en uso por \"{a2}\"!" - -#: ../plcopen/plcopen.py:496 +msgstr "¡\"{a1}\" ya está siendo usada por \"{a2}\"!" + +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "\"{a1}\" el recurso ya existe en la configuración \"{a2}\" !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "\"{a1}\" el recurso no existe en la configuración \"{a2}\" !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dd" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%ds" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s Tipos de Datos" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POUs" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "Perfil %s" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "%s El cuerpo no tiene instancias!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%s El cuerpo no posee texto!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Añadir Elemento" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Cerrar" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Configuración" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" -msgstr "&TipodeDato" - -#: ../IDEFrame.py:390 +msgstr "&Tipo de Dato" + +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Eliminar" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Mostrar" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Editar" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Archivo" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Función" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Ayuda" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Licencia" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Programa" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Propiedades" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&Proyectos Recientes" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Recursos" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} coincidencia en el proyecto" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} coincidencias en el proyecto" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' ubicado en {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d coincidencias)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr "," - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- Seleccione el tipo de URI -" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1d" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1h" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -401,38 +401,38 @@ "Un POU tiene un elemento llamado \"%s\". Esto puede causar conflicto. ¿Desea" " Continuar?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" -msgstr "Un POU llamado \"%s\" ya existe!" +msgstr "¡Ya existe un POU llamado \"%s\"!" #: ../ConfigTreeNode.py:424 #, python-brace-format msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Hijo llamado \"{a1}\" ya existe -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" -msgstr "¡Debe seleccionar una localización!" - -#: ../editors/ResourceEditor.py:451 +msgstr "¡Debe seleccionar una ubicación!" + +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" -msgstr "¡Y existe una tarea con ese nombre!" - -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +msgstr "¡Ya existe una tarea con ese nombre!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" -msgstr "¡Variable llamada \"%s\" ya existente en este pou!" - -#: ../editors/CodeFileEditor.py:780 +msgstr "¡Ya existe una variable llamada \"%s\" en este POU!" + +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" -msgstr "¡Variable llamada \"%s\" ya existente!" - -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +msgstr "¡Ya existe una variable llamada \"%s\"!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "Acerca de" @@ -440,822 +440,834 @@ msgid "Absolute number" msgstr "Valor absoluto" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Acción" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Bloque de acción" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Nombre de acción" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Nombre de acción:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" -msgstr "Acción llamada %s no existe!" - -#: ../PLCControler.py:98 +msgstr "¡No existe una Acción llamada %s!" + +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Acciones" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Acciones:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Activo" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Añadir" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" -msgstr "Añadir acción" - -#: ../features.py:32 +msgstr "Añadir Acción" + +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" -msgstr "" - -#: ../IDEFrame.py:1876 +msgstr "Agregue código C accediendo a las variables ubicadas sincrónicamente" + +#: ../IDEFrame.py:1907 msgid "Add Configuration" -msgstr "" - -#: ../IDEFrame.py:1856 +msgstr "Añadir Configuración" + +#: ../IDEFrame.py:1887 msgid "Add DataType" -msgstr "" - -#: ../editors/Viewer.py:572 +msgstr "Añadir Tipo de Dato" + +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:117 +msgstr "Añadir Ramificación" + +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" -msgstr "" - -#: ../IDEFrame.py:1864 +msgstr "Añadir IP" + +#: ../IDEFrame.py:1895 msgid "Add POU" -msgstr "" - -#: ../features.py:33 +msgstr "Añadir POU" + +#: ../features.py:34 msgid "Add Python code executed asynchronously" -msgstr "" - -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +msgstr "Añadir Código Python ejecutado de forma asíncrona" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" -msgstr "" - -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +msgstr "Añadir un Recurso" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" -msgstr "" - -#: ../editors/Viewer.py:559 +msgstr "Añadir Transición" + +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" -msgstr "" - -#: ../editors/SFCViewer.py:433 +msgstr "Añadir Segmento de Cable" + +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" -msgstr "" - -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +msgstr "Añadir un nuevo Paso Inicial" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" -msgstr "" - -#: ../editors/SFCViewer.py:455 +msgstr "Añadir un nuevo Salto" + +#: ../editors/SFCViewer.py:469 msgid "Add a new step" -msgstr "" - -#: ../features.py:34 +msgstr "Añadir un nuevo Paso" + +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:137 +msgstr "Añadir una Interfaz de usuario simple basada en WxGlade" + +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" -msgstr "" - -#: ../editors/DataTypeEditor.py:352 +msgstr "Añadir Acción" + +#: ../editors/DataTypeEditor.py:364 msgid "Add element" -msgstr "" - -#: ../editors/ResourceEditor.py:268 +msgstr "Añadir Elemento" + +#: ../editors/ResourceEditor.py:283 msgid "Add instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:103 +msgstr "Añadir Instancia" + +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" -msgstr "" - -#: ../editors/ResourceEditor.py:239 +msgstr "Añadir Esclavo" + +#: ../editors/ResourceEditor.py:252 msgid "Add task" -msgstr "" - -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +msgstr "Añadir Tarea" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" -msgstr "" +msgstr "Añadir una Variable" #: ../plcopen/iec_std.csv:33 msgid "Addition" -msgstr "" - -#: ../plcopen/definitions.py:49 +msgstr "Suma" + +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" -msgstr "" - -#: ../editors/Viewer.py:630 +msgstr "Bloques adicionales" + +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" -msgstr "" - -#: ../editors/Viewer.py:1686 +msgstr "Ajustar el tamaño del bloque" + +#: ../editors/Viewer.py:1720 msgid "Alignment" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +msgstr "Alineación" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" -msgstr "" - -#: ../editors/FileManagementPanel.py:35 +msgstr "Todo" + +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" -msgstr "" - -#: ../ProjectController.py:1685 +msgstr "Todos los archivos (*.*)|*.*|Archivos CSV (*.csv)|*.csv" + +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:591 +msgstr "Ya está conectado. Por favor desconecte\n" + +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" -msgstr "Ya existe un elemento con el nombre \"%s\" en esta estructura! " - -#: ../editors/ResourceEditor.py:486 +msgstr "¡Ya existe un elemento con el nombre \"%s\" en esta estructura! " + +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" -msgstr "Ya existe una instancia con este nombre!" - -#: ../dialogs/ConnectionDialog.py:100 +msgstr "¡Ya existe una instancia con este nombre!" + +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "" +"Aplicar el cambio de nombre a todos los que siguen con el mismo nombre" #: ../plcopen/iec_std.csv:31 msgid "Arc cosine" -msgstr "Arco coseno" +msgstr "Arcocoseno" #: ../plcopen/iec_std.csv:30 msgid "Arc sine" -msgstr "Arco seno" +msgstr "Arcoseno" #: ../plcopen/iec_std.csv:32 msgid "Arc tangent" -msgstr "Arco tangente" +msgstr "Arcotangente" #: ../plcopen/iec_std.csv:33 msgid "Arithmetic" -msgstr "Aritmética" - -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +msgstr "Aritméticos" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" -msgstr "" +msgstr "Arreglo" #: ../plcopen/iec_std.csv:39 msgid "Assignment" msgstr "Asignación" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" -msgstr "Debe seleccionar al menos una variable o expresión!" - -#: ../controls/ProjectPropertiesPanel.py:100 +msgstr "¡Debe seleccionar al menos una variable o expresión!" + +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Autor" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Nombre del autor (opcional):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" -msgstr "" - -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +msgstr "Hacia atrás" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +msgstr "Tamaño de la ubicación incorrecto: %s" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" -msgstr "" - -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +msgstr "Tipo base:" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" -msgstr "" - -#: ../BeremizIDE.py:455 +msgstr "Tipos base" + +#: ../BeremizIDE.py:483 msgid "Beremiz" -msgstr "" +msgstr "Beremiz" #: ../plcopen/iec_std.csv:70 msgid "Binary selection (1 of 2)" -msgstr "" +msgstr "Selección binaria (1 de 2)" #: ../plcopen/iec_std.csv:62 msgid "Bit-shift" -msgstr "" +msgstr "Intercambio de bits" #: ../plcopen/iec_std.csv:66 msgid "Bitwise" -msgstr "" +msgstr "A nivel de bits" #: ../plcopen/iec_std.csv:66 msgid "Bitwise AND" -msgstr "" +msgstr "Y a nivel de bits" #: ../plcopen/iec_std.csv:67 msgid "Bitwise OR" -msgstr "" +msgstr "O a nivel de bits" #: ../plcopen/iec_std.csv:68 msgid "Bitwise XOR" -msgstr "" +msgstr "O exclusivo a nivel de bits" #: ../plcopen/iec_std.csv:69 msgid "Bitwise inverting" -msgstr "" - -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +msgstr "Inversión a nivel de bits" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Bloque" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" -msgstr "" - -#: ../editors/TextViewer.py:262 +msgstr "Propiedades del Bloque" + +#: ../editors/TextViewer.py:260 msgid "Block name" -msgstr "" - -#: ../editors/Viewer.py:550 +msgstr "Nombre del bloque" + +#: ../editors/Viewer.py:586 msgid "Bottom" -msgstr "" - -#: ../ProjectController.py:1363 +msgstr "Fondo" + +#: ../ProjectController.py:1400 msgid "Broken" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +msgstr "Roto" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:65 +msgstr "Navegar en la biblioteca de valores %s" + +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" -msgstr "" - -#: ../ProjectController.py:1832 +msgstr "Buscar ubicación" + +#: ../ProjectController.py:1815 msgid "Build" -msgstr "" - -#: ../ProjectController.py:1297 +msgstr "Construir" + +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" -msgstr "" - -#: ../ProjectController.py:1833 +msgstr "El directorio de contrucción ya esta vacío\n" + +#: ../ProjectController.py:1816 msgid "Build project into build folder" -msgstr "" - -#: ../ProjectController.py:1080 +msgstr "Construir el proyecto en el directorio de contrución" + +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" -msgstr "" - -#: ../ProjectController.py:1077 +msgstr "¡La construccion en lenguaje C falló!\n" + +#: ../ProjectController.py:1105 msgid "C Build failed.\n" -msgstr "" - -#: ../c_ext/CFileEditor.py:63 +msgstr "La construccion en lenguaje C falló.\n" + +#: ../c_ext/CFileEditor.py:66 msgid "C code" -msgstr "" - -#: ../ProjectController.py:1155 +msgstr "Código C" + +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" -msgstr "" - -#: ../targets/toolchain_makefile.py:122 +msgstr "El código C fué generado con éxito.\n" + +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" -msgstr "" - -#: ../targets/toolchain_gcc.py:192 +msgstr "Falló la compilación C.\n" + +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" -msgstr "" - -#: ../features.py:32 +msgstr "Falló la compilación C de %s.\n" + +#: ../features.py:33 msgid "C extension" -msgstr "" - -#: ../dialogs/AboutDialog.py:71 +msgstr "Extensión lenguaje C" + +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" -msgstr "" - -#: ../canfestival/NetworkEditor.py:52 +msgstr "C&reditos" + +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" -msgstr "" - -#: ../canfestival/SlaveEditor.py:44 +msgstr "Red CANOpen" + +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" -msgstr "" +msgstr "Esclavo CANOpen" #: ../features.py:31 msgid "CANopen support" -msgstr "" - -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +msgstr "Soporte CANOpen" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" -msgstr "" - -#: ../controls/VariablePanel.py:267 +msgstr "¡Solo puede generar orden de ejecución en redes FBD!" + +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" -msgstr "" - -#: ../PLCOpenEditor.py:344 +msgstr "Solo puede dar una ubicación a variables locales globales " + +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" -msgstr "" - -#: ../controls/VariablePanel.py:265 +msgstr "¡No se puede generar el programa para el archivo %s! " + +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" -msgstr "" - -#: ../PLCOpenEditor.py:389 +msgstr "¡No se puede dar una ubicación a una instacia de bloque de funciones!" + +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" -msgstr "" - -#: ../controls/VariablePanel.py:313 +msgstr "¡No se puede salvar el proyecto en el archivo %s!" + +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" - -#: ../ConfigTreeNode.py:529 +"No se puede asignar un valor inicial a una instancia de bloque de funcion" + +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " -msgstr "" +msgstr "No se puede crear el hijo {a1} de tipo {a2}" #: ../ConfigTreeNode.py:454 #, python-format msgid "Cannot find lower free IEC channel than %d\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:131 +msgstr "No se puede encontrar un canal IEC libre menor a %d\n" + +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "Falla de conexión - No puedo obtener el estado del PLC\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" -msgstr "" - -#: ../canfestival/config_utils.py:374 +msgstr "¡No puedo abrir o analizar VARIABLES.csv!\n" + +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +"No se puede asignar el offset de bits para la variable no booleana '{a1}' " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" +"¡No se puede transferir mientras el PLC se esta ejecutando! ¿Desea detenerlo" +" ahora?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" -msgstr "" - -#: ../editors/Viewer.py:545 +msgstr "Distingue entre mayúsculas y minúsculas" + +#: ../editors/Viewer.py:581 msgid "Center" -msgstr "" - -#: ../Beremiz_service.py:268 +msgstr "Centrar" + +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" -msgstr "" - -#: ../Beremiz_service.py:267 +msgstr "Cambiar la IP de la interfaz para enlazar" + +#: ../Beremiz_service.py:275 msgid "Change Name" -msgstr "" - -#: ../IDEFrame.py:1946 +msgstr "Cambiar Nombre" + +#: ../IDEFrame.py:1977 msgid "Change POU Type To" -msgstr "" - -#: ../Beremiz_service.py:269 +msgstr "Cambiar el tipo de POU a" + +#: ../Beremiz_service.py:277 msgid "Change Port Number" -msgstr "" - -#: ../Beremiz_service.py:270 +msgstr "Cambiar el Número de Puerto" + +#: ../Beremiz_service.py:278 msgid "Change working directory" -msgstr "" +msgstr "Cambiar el directorio de trabajo" #: ../plcopen/iec_std.csv:81 msgid "Character string" -msgstr "" - -#: ../svgui/svgui.py:128 +msgstr "Cadena de caracteres" + +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" -msgstr "" - -#: ../ProjectController.py:542 +msgstr "Elegir un archivo SVG" + +#: ../ProjectController.py:561 msgid "Choose a directory to save project" -msgstr "" - -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +msgstr "Elija un directorio para salvar el projecto" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" -msgstr "" - -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +msgstr "Elija un archivo" + +#: ../BeremizIDE.py:900 msgid "Choose a project" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +msgstr "Elija un archivo" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" -msgstr "" - -#: ../Beremiz_service.py:325 +msgstr "Elija un valor para %s:" + +#: ../Beremiz_service.py:333 msgid "Choose a working directory " -msgstr "" - -#: ../ProjectController.py:449 +msgstr "Elija un directorio de trabajo" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Elija un directorio vacío para el nuevo proyecto" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" - -#: ../ProjectController.py:416 +"El directorio seleccionado no contiene un programa. ¡No es un proyecto " +"válido!" + +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +"El directorio seleccionado no esta vacío. ¡No puede ser usado para un " +"proyecto nuevo!" + +#: ../controls/VariablePanel.py:60 msgid "Class" -msgstr "" - -#: ../controls/VariablePanel.py:441 +msgstr "Clase" + +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:70 +msgstr "Filtro de clase:" + +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" -msgstr "" - -#: ../ProjectController.py:1836 +msgstr "Clase:" + +#: ../ProjectController.py:1821 msgid "Clean" -msgstr "" - -#: ../controls/LogViewer.py:318 +msgstr "Limpiar" + +#: ../controls/LogViewer.py:327 msgid "Clean log messages" -msgstr "" - -#: ../ProjectController.py:1838 +msgstr "Limpiar el registro de mensajes" + +#: ../ProjectController.py:1822 msgid "Clean project build folder" -msgstr "" - -#: ../ProjectController.py:1294 +msgstr "Limpiar la carpeta de construcción del proyecto" + +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" -msgstr "" - -#: ../IDEFrame.py:435 +msgstr "Limpiando el directorio de construcción\n" + +#: ../IDEFrame.py:437 msgid "Clear Errors" -msgstr "" - -#: ../editors/Viewer.py:641 +msgstr "Borrar errores" + +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +msgstr "Borrar el Orden de Ejecusión" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" -msgstr "" - -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +msgstr "Cerrar" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" -msgstr "" - -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +msgstr "Cerrar Aplicación" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" -msgstr "" - -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +msgstr "Cerrar Proyecto" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" -msgstr "" - -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +msgstr "Cerrar Pestaña" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" -msgstr "" - -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +msgstr "Bobina" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" -msgstr "" - -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +msgstr "Comentario" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" -msgstr "" - -#: ../dialogs/ProjectDialog.py:60 +msgstr "Soporte de la comunidad" + +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:95 +msgstr "Nombre de empresa" + +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:96 +msgstr "Nombre de empresa (requerido):" + +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" -msgstr "" +msgstr "Página web (opcional):" #: ../plcopen/iec_std.csv:75 msgid "Comparison" -msgstr "" - -#: ../ProjectController.py:734 +msgstr "Comparación" + +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" -msgstr "" +msgstr "Compilando el programa IEC en código C...\n" #: ../plcopen/iec_std.csv:85 msgid "Concatenation" -msgstr "" - -#: ../editors/ConfTreeNodeEditor.py:230 +msgstr "Concatenación" + +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" -msgstr "" - -#: ../editors/ProjectNodeEditor.py:36 +msgstr "Config" + +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:40 +msgstr "Variables de Configuración" + +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" -msgstr "" - -#: ../PLCControler.py:99 +msgstr "Configuración" + +#: ../plcopen/types_enums.py:77 msgid "Configurations" -msgstr "" - -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +msgstr "Configuraciones" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" -msgstr "" - -#: ../ProjectController.py:1851 +msgstr "Confirme en cambio de nombre de la variable" + +#: ../ProjectController.py:1842 msgid "Connect" -msgstr "" - -#: ../ProjectController.py:1852 +msgstr "Conectar" + +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" -msgstr "" - -#: ../ProjectController.py:1354 +msgstr "Conectar el PLC de destino" + +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +msgstr "Conectado a la URI: %s" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:53 +msgstr "Conexión" + +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" -msgstr "" - -#: ../ProjectController.py:1709 +msgstr "Propiedades de la conexión" + +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" -msgstr "" - -#: ../ProjectController.py:1734 +msgstr "¡Conexión cancelada!\n" + +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +msgstr "¡La conexión con %s falló!\n" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:102 +msgstr "¡Conexión perdida!\n" + +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +msgstr "¡La conexión con '%s' falló!\n" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:66 +msgstr "Conector" + +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" -msgstr "" - -#: ../BeremizIDE.py:350 +msgstr "Conectores:" + +#: ../BeremizIDE.py:378 msgid "Console" -msgstr "" - -#: ../controls/VariablePanel.py:60 +msgstr "Consola" + +#: ../controls/VariablePanel.py:75 msgid "Constant" -msgstr "" - -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +msgstr "Constante" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:198 +msgstr "Contacto" + +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +msgstr "Descripción del contenido (opcional):" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" -msgstr "" +msgstr "Continuación" #: ../plcopen/iec_std.csv:18 msgid "Conversion from BCD" -msgstr "" +msgstr "Conversión desde BCD" #: ../plcopen/iec_std.csv:19 msgid "Conversion to BCD" -msgstr "" +msgstr "Conversión a BCD" #: ../plcopen/iec_std.csv:21 msgid "Conversion to date" -msgstr "" +msgstr "Conversión a fecha" #: ../plcopen/iec_std.csv:20 msgid "Conversion to time-of-day" -msgstr "" - -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +msgstr "Conversión a hora-del-día" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" -msgstr "" - -#: ../IDEFrame.py:1933 +msgstr "Copiar" + +#: ../IDEFrame.py:1964 msgid "Copy POU" -msgstr "" - -#: ../editors/FileManagementPanel.py:65 +msgstr "Copiar POU" + +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" -msgstr "" - -#: ../editors/FileManagementPanel.py:64 +msgstr "Copiar el archivo de la carpeta de la izquierda a la derecha" + +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" -msgstr "" +msgstr "Copiar el archivo de la carpeta de la derecha a la izquierda " #: ../plcopen/iec_std.csv:28 msgid "Cosine" -msgstr "" - -#: ../ConfigTreeNode.py:656 +msgstr "Coseno" + +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" "{a3}\n" msgstr "" - -#: ../py_ext/PythonFileCTNMixin.py:78 +"No se pudo añadir el hijo \"{a1}\", tipo {a2}:\n" +"{a3}\n" + +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." -msgstr "" - -#: ../ConfigTreeNode.py:626 +msgstr "No se pudo importar el archivo viejo %s." + +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" " {a2}" msgstr "" - -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +"No se pudieron cargar los siguientes parámetros base del confnode {a1}:\n" +"{a2}" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" " {a2}" msgstr "" - -#: ../PLCControler.py:948 +"No se pudieron cargar los siguientes parámetros del confnode {a1}:\n" +"{a2}" + +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." -msgstr "" - -#: ../ProjectController.py:1651 +msgstr "No puede pegar un objeto distinto a un POU " + +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" -msgstr "" - -#: ../ProjectController.py:1659 +msgstr "¡No se pudo iniciar el PLC!\n" + +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" -msgstr "" - -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "" - -#: ../svgui/svgui.py:49 +msgstr "¡No se pudo detener el PLC!\n" + +#: ../svgui/svgui.py:57 msgid "Create HMI" -msgstr "" - -#: ../dialogs/PouDialog.py:46 +msgstr "Crear un HMI" + +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" -msgstr "" - -#: ../dialogs/PouActionDialog.py:38 +msgstr "Crear un nuevo POU" + +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" -msgstr "" - -#: ../IDEFrame.py:159 +msgstr "Crear una nueva Acción" + +#: ../IDEFrame.py:166 msgid "Create a new action block" -msgstr "" - -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +msgstr "Crear un nuevo Bloque de Acción" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" -msgstr "" - -#: ../IDEFrame.py:132 +msgstr "Crear un nuevo Bloque" + +#: ../IDEFrame.py:139 msgid "Create a new branch" -msgstr "" - -#: ../IDEFrame.py:126 +msgstr "Crear una nueva rama" + +#: ../IDEFrame.py:133 msgid "Create a new coil" -msgstr "" - -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +msgstr "Crear una nueva bobina" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" -msgstr "" - -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +msgstr "Crear un nuevo comentario" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" -msgstr "" - -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +msgstr "Crear una nueva conexión" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" -msgstr "" - -#: ../IDEFrame.py:162 +msgstr "Crear un nuevo contacto" + +#: ../IDEFrame.py:169 msgid "Create a new divergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:53 +msgstr "Crear una nueva divergencia" + +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" -msgstr "" - -#: ../IDEFrame.py:150 +msgstr "Crear una nueva divergencia o convergencia" + +#: ../IDEFrame.py:157 msgid "Create a new initial step" -msgstr "" - -#: ../IDEFrame.py:165 +msgstr "Crear un nuevo Paso inicial" + +#: ../IDEFrame.py:172 msgid "Create a new jump" -msgstr "" - -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +msgstr "Crear un nuevo salto" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" -msgstr "" - -#: ../IDEFrame.py:123 +msgstr "Crear un nuevo carril de potencia" + +#: ../IDEFrame.py:130 msgid "Create a new rung" -msgstr "" - -#: ../IDEFrame.py:153 +msgstr "Crear un nuevo escalón" + +#: ../IDEFrame.py:160 msgid "Create a new step" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +msgstr "Crear un nuevo paso" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" -msgstr "" - -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +msgstr "Crear una nueva transición" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" -msgstr "" - -#: ../dialogs/AboutDialog.py:113 +msgstr "Crear una nueva variable" + +#: ../dialogs/AboutDialog.py:109 msgid "Credits" -msgstr "" - -#: ../Beremiz_service.py:434 +msgstr "Créditos" + +#: ../Beremiz_service.py:424 msgid "Current working directory :" -msgstr "" - -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +msgstr "Directorio de trabajo actual:" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" -msgstr "" - -#: ../editors/ResourceEditor.py:72 +msgstr "Cortar" + +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" -msgstr "" +msgstr "Cíclico" #: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 #: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 @@ -1263,1891 +1275,1947 @@ #: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 #: ../plcopen/iec_std.csv:60 msgid "DEPRECATED" -msgstr "" - -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +msgstr "OBSOLETO" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" -msgstr "" - -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +msgstr "Perfil DS-301" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:36 +msgstr "Perfil DS-302" + +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" -msgstr "" - -#: ../PLCControler.py:98 +msgstr "Tipo de dato" + +#: ../plcopen/types_enums.py:76 msgid "Data Types" -msgstr "" +msgstr "Tipos de datos" #: ../plcopen/iec_std.csv:16 msgid "Data type conversion" -msgstr "" +msgstr "Cambio de tipo de datos" #: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 msgid "Date addition" -msgstr "" +msgstr "Suma de fechas" #: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 #: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 msgid "Date and time subtraction" -msgstr "" +msgstr "Resta de Fecha y Hora" #: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 msgid "Date subtraction" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:44 +msgstr "Resta de Fechas" + +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" -msgstr "" - -#: ../ProjectController.py:1756 +msgstr "Días:" + +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:134 +"La depuración no coincide con el PLC: Detenga / transfiera / inicie para " +"volver a habilitar\n" + +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" -msgstr "" - -#: ../editors/Viewer.py:448 +msgstr "Instancia de depuración" + +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" -msgstr "" - -#: ../ProjectController.py:1412 +msgstr "Depuración: %s" + +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" -msgstr "" - -#: ../ProjectController.py:1410 +msgstr "Depuración: La variable '%s' es desconocida\n" + +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" -msgstr "" - -#: ../IDEFrame.py:639 +msgstr "Depuración: El tipo '%s' no es soportado por el depurador\n" + +#: ../IDEFrame.py:660 msgid "Debugger" -msgstr "" - -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "" - -#: ../ProjectController.py:1753 +msgstr "Depurador" + +#: ../ProjectController.py:1726 msgid "Debugger ready\n" -msgstr "" - -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +msgstr "Depurador listo\n" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" -msgstr "" - -#: ../editors/Viewer.py:573 +msgstr "Borrar" + +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" -msgstr "" - -#: ../editors/FileManagementPanel.py:153 +msgstr "Borrar Rama de Divergencia" + +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" -msgstr "" - -#: ../editors/Viewer.py:560 +msgstr "Borrar Archivo" + +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" -msgstr "" - -#: ../controls/CustomEditableListBox.py:41 +msgstr "Borrar Segmento de Cableado" + +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" -msgstr "" +msgstr "Borrar Elemento" #: ../plcopen/iec_std.csv:88 msgid "Deletion (within)" -msgstr "" - -#: ../editors/DataTypeEditor.py:153 +msgstr "Borrar (interno)" + +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" -msgstr "" - -#: ../editors/CodeFileEditor.py:739 +msgstr "Tipo de Derivación:" + +#: ../editors/CodeFileEditor.py:735 msgid "Description" -msgstr "" - -#: ../controls/VariablePanel.py:432 +msgstr "Descripción" + +#: ../controls/VariablePanel.py:463 msgid "Description:" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +msgstr "Descripción:" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:66 +msgstr "Dimensiones:" + +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:91 +msgstr "Dirección" + +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Dirección:" + +#: ../editors/DataTypeEditor.py:60 msgid "Directly" -msgstr "" - -#: ../ProjectController.py:1860 +msgstr "Directamente" + +#: ../ProjectController.py:1855 msgid "Disconnect" -msgstr "" - -#: ../ProjectController.py:1862 +msgstr "Desconectar" + +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" -msgstr "" - -#: ../ProjectController.py:1364 +msgstr "Desconectar del PLC" + +#: ../ProjectController.py:1401 msgid "Disconnected" -msgstr "" - -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +msgstr "Desconectado" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" -msgstr "" +msgstr "Divergencia" #: ../plcopen/iec_std.csv:36 msgid "Division" -msgstr "" - -#: ../editors/FileManagementPanel.py:152 +msgstr "División" + +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "¿Realmente desea borrar el archivo '%s'?" + +#: ../controls/VariablePanel.py:65 msgid "Documentation" -msgstr "" - -#: ../PLCOpenEditor.py:338 +msgstr "Documentación" + +#: ../PLCOpenEditor.py:312 msgid "Done" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 +msgstr "Listo" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" -msgstr "" - -#: ../canfestival/canfestival.py:165 +msgstr "Duración" + +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" -msgstr "" - -#: ../editors/Viewer.py:629 +msgstr "Archivos EDS (*.eds)|*.eds|Todos los archivos|*.*" + +#: ../editors/Viewer.py:668 msgid "Edit Block" -msgstr "" +msgstr "Editar Bloque" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "Editar Bobina" #: ../dialogs/LDElementDialog.py:56 -msgid "Edit Coil Values" -msgstr "" - -#: ../dialogs/LDElementDialog.py:54 msgid "Edit Contact Values" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:59 +msgstr "Editar Contacto" + +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:51 +msgstr "Editar Duración" + +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:38 +msgstr "Editar Paso" + +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:121 +msgstr "Editar un WxWidgets GUI con WXGlade" + +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:44 +msgstr "Editar Bloque de Acción" + +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" -msgstr "" - -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +msgstr "Editar Matriz" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" -msgstr "" - -#: ../editors/FileManagementPanel.py:66 +msgstr "Editar Comentario" + +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" -msgstr "" - -#: ../controls/CustomEditableListBox.py:39 +msgstr "Editar archivo" + +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" -msgstr "" - -#: ../editors/Viewer.py:3014 +msgstr "Editar item" + +#: ../editors/Viewer.py:3059 msgid "Edit jump target" -msgstr "" - -#: ../ProjectController.py:1874 +msgstr "Editar Destino del Salto" + +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" -msgstr "" - -#: ../editors/SFCViewer.py:799 +msgstr "Editar el código IEC añadido al codigo generado por PLCGenerator " + +#: ../editors/SFCViewer.py:815 msgid "Edit step name" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:52 +msgstr "Editar el nombre del paso" + +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" -msgstr "" - -#: ../IDEFrame.py:611 +msgstr "Editar transición" + +#: ../IDEFrame.py:632 msgid "Editor ToolBar" -msgstr "" - -#: ../ProjectController.py:1257 +msgstr "Barra de Herramienta Editor" + +#: ../ProjectController.py:1294 msgid "Editor selection" -msgstr "" - -#: ../editors/DataTypeEditor.py:348 +msgstr "Selección del Editor" + +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" -msgstr "" - -#: ../ProjectController.py:1362 +msgstr "Elementos:" + +#: ../ProjectController.py:1399 msgid "Empty" -msgstr "" - -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "" - -#: ../Beremiz_service.py:333 +msgstr "Vacío" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Las dimensiones no pueden estar vacías." + +#: ../Beremiz_service.py:341 msgid "Enter a name " -msgstr "" - -#: ../Beremiz_service.py:318 +msgstr "Ingrese un nombre" + +#: ../Beremiz_service.py:326 msgid "Enter a port number " -msgstr "" - -#: ../Beremiz_service.py:309 +msgstr "Ingrese un número de puerto" + +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Escriba la dirección IP de la interfaz a enlazar" + +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" -msgstr "" +msgstr "Enumerado" #: ../plcopen/iec_std.csv:77 msgid "Equal to" -msgstr "" - -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +msgstr "Igual a" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" -msgstr "" - -#: ../ProjectController.py:789 +msgstr "Error" + +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "" - -#: ../ProjectController.py:781 +"Error: ¡Debe declarar en el PLC, al menos una configuración y un recurso!\n" + +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" -msgstr "" - -#: ../ProjectController.py:712 +msgstr "Error: El compilador de IEC a C retorno %d\n" + +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" "%s\n" msgstr "" - -#: ../ConfigTreeNode.py:216 +"Error en el generador de código ST/IL/SFC:\n" +"%s\n" + +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" -msgstr "" - -#: ../canfestival/canfestival.py:170 +msgstr "Error al guardar \"%s\"\n" + +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" -msgstr "" - -#: ../canfestival/canfestival.py:371 +msgstr "Error: Error al exportar el esclavo\n" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" +"Error: Error: Los servidores Modbus/IP %{a1}.x y %{a2}.x usan el mismo " +"numero de puerto {a3}.\n" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" -msgstr "" - -#: ../canfestival/canfestival.py:366 +msgstr "Error: No se genera el Maestro\n" + +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" -msgstr "" - -#: ../ProjectController.py:1728 +msgstr "Error: No se construyó el PLC\n" + +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:120 +msgstr "¡Ocurrió una excepción conectando %s!\n" + +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +msgstr "Control de ejecusión:" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" -msgstr "" - -#: ../features.py:35 +msgstr "Orden de Ejecusión:" + +#: ../features.py:36 msgid "Experimental web based HMI" -msgstr "" +msgstr "HMI experimental basada en web" #: ../plcopen/iec_std.csv:38 msgid "Exponent" -msgstr "" +msgstr "Exponente" #: ../plcopen/iec_std.csv:26 msgid "Exponentiation" -msgstr "" - -#: ../canfestival/canfestival.py:176 +msgstr "Exponenciación" + +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +msgstr "Exportar el esclavo CanOpen a un archivo EDS" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" -msgstr "" - -#: ../canfestival/canfestival.py:175 +msgstr "Exportar los valores del gráfico al portapapeles" + +#: ../canfestival/canfestival.py:185 msgid "Export slave" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:90 +msgstr "Exportar esclavo" + +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" -msgstr "" - -#: ../controls/VariablePanel.py:72 +msgstr "Expresión:" + +#: ../controls/VariablePanel.py:90 msgid "External" -msgstr "" - -#: ../ProjectController.py:802 +msgstr "Externa" + +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +msgstr "Extrayendo variables locales...\n" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" -msgstr "" - -#: ../ProjectController.py:1791 +msgstr "FBD" + +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" -msgstr "" - -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +msgstr "Error: Debe construir el proyecto antes de la trasferencia.\n" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" -msgstr "" - -#: ../ProjectController.py:1070 +msgstr "Flanco descendente" + +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" -msgstr "" - -#: ../Beremiz.py:156 +msgstr "Error: No se puede obtener el constructor.\n" + +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:164 +msgstr "Buscando %s" + +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:166 +msgstr "¡El valor en el campo %s no es válido!" + +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" -msgstr "" - -#: ../controls/FolderTree.py:216 +msgstr "¡Los valores en los campos %s no son válidos!" + +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +msgstr "¡El archivo '%s' ya existe!" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" -msgstr "" - -#: ../IDEFrame.py:377 +msgstr "Buscar" + +#: ../IDEFrame.py:379 msgid "Find Next" -msgstr "" - -#: ../IDEFrame.py:379 +msgstr "Buscar el siguiente" + +#: ../IDEFrame.py:381 msgid "Find Previous" -msgstr "" +msgstr "Buscar el anterior" #: ../plcopen/iec_std.csv:90 msgid "Find position" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:55 +msgstr "Buscar una posición" + +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "" - -#: ../editors/Viewer.py:1600 +msgstr "Buscar:" + +#: ../editors/Viewer.py:1633 msgid "Force value" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:162 +msgstr "Forzar el valor" + +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +msgstr "Forzar el valor de la variable" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +msgstr "El formulario no esta completo. ¡Debe llenar %s!" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:232 +msgstr "¡El formulario no esta completo. Debe especificar un nombre!" + +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" - -#: ../dialogs/FindInPouDialog.py:72 +"¡El formulario no esta completo. Debe selecccionar un tipo de bloque válido!" + +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +msgstr "Adelante" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" -msgstr "" - -#: ../IDEFrame.py:349 +msgstr "Función" + +#: ../IDEFrame.py:354 msgid "Function &Block" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +msgstr "&Bloque de Función" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" -msgstr "" - -#: ../controls/VariablePanel.py:854 +msgstr "Bloque de Función" + +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" -msgstr "" - -#: ../PLCControler.py:97 +msgstr "Tipos de Bloque de Función" + +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" -msgstr "" - -#: ../editors/Viewer.py:249 +msgstr "Bloques de Función" + +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" -msgstr "" - -#: ../PLCControler.py:2343 +msgstr "¡Los Bloques de Función no se pueden usar en las Funciones!" + +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" -msgstr "" - -#: ../PLCControler.py:97 +msgstr "¡El Bloque de Función \"%s\" no se pueden pegar en una Función!" + +#: ../plcopen/types_enums.py:75 msgid "Functions" -msgstr "" - -#: ../PLCOpenEditor.py:117 +msgstr "Funciones" + +#: ../PLCOpenEditor.py:88 msgid "Generate Program" -msgstr "" - -#: ../ProjectController.py:703 +msgstr "Generar Programa" + +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" -msgstr "" - -#: ../controls/VariablePanel.py:73 +msgstr "Generando el código ST/IL/SFC IEC-61131 para el SoftPLC...\n" + +#: ../controls/VariablePanel.py:91 msgid "Global" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +msgstr "Global" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:174 +msgstr "Ir al valor actual" + +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" -msgstr "" +msgstr "Gráficos" #: ../plcopen/iec_std.csv:75 msgid "Greater than" -msgstr "" +msgstr "Mayor que" #: ../plcopen/iec_std.csv:76 msgid "Greater than or equal to" -msgstr "" +msgstr "Mayor o igual a" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "Resolución de la maya:" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "Puerto de interfaz HTTP:" #: ../controls/ProjectPropertiesPanel.py:135 -msgid "Grid Resolution:" -msgstr "" - -#: ../runtime/NevowServer.py:182 -msgid "HTTP interface port :" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:121 msgid "Height:" -msgstr "" - -#: ../editors/FileManagementPanel.py:85 +msgstr "Altura:" + +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:151 +msgstr "DIrectorio de inicio:" + +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:45 +msgstr "Horizontal:" + +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +msgstr "Horas:" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:94 +msgstr "IL" + +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" -msgstr "" - -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +msgstr "IP" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" -msgstr "" - -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +msgstr "¡La dirección IP no es válida!" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +msgstr "Importar SVG" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" -msgstr "" - -#: ../editors/Viewer.py:431 +msgstr "EntradaSalida" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" +"La variable de tipo InOut {a1} en el bloque {a2} del POU {a3} debe estar " +"conectada." + +#: ../editors/Viewer.py:473 msgid "Inactive" -msgstr "" - -#: ../controls/VariablePanel.py:276 +msgstr "inactivo" + +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../controls/VariablePanel.py:282 +msgstr "Tipo de dato incompatible entre \"{a1}\" y \"{a2}\"" + +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" -msgstr "" - -#: ../controls/VariablePanel.py:286 +msgstr "Tamaño de dato incompatible entre \"%s\" y \"BOOL\"" + +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 +msgstr "Tamaño de dato incompatible entre \"{a1}\" y \"{a2}\"" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" -msgstr "" - -#: ../editors/CodeFileEditor.py:739 +msgstr "Indicador" + +#: ../editors/CodeFileEditor.py:734 msgid "Initial" -msgstr "" - -#: ../editors/Viewer.py:611 +msgstr "Inicial" + +#: ../editors/Viewer.py:650 msgid "Initial Step" -msgstr "" - -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +msgstr "Paso Inicial" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +msgstr "Valor Inicial" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" -msgstr "" - -#: ../svgui/svgui.py:48 +msgstr "Valor Inicial:" + +#: ../svgui/svgui.py:56 msgid "Inkscape" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +msgstr "InkScape" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +msgstr "En línea" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:96 +msgstr "Entrada" + +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" -msgstr "" +msgstr "Entradas" #: ../plcopen/iec_std.csv:87 msgid "Insertion (into)" -msgstr "" - -#: ../plcopen/plcopen.py:1696 +msgstr "Insertar (cadena)" + +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" -msgstr "" - -#: ../editors/ResourceEditor.py:264 +msgstr "¡No existe una instancia con ID %d!" + +#: ../editors/ResourceEditor.py:279 msgid "Instances:" -msgstr "" - -#: ../controls/VariablePanel.py:70 +msgstr "Instancias:" + +#: ../controls/VariablePanel.py:88 msgid "Interface" -msgstr "" - -#: ../editors/ResourceEditor.py:72 +msgstr "Interface" + +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Interrumpir" + +#: ../editors/ResourceEditor.py:76 msgid "Interval" -msgstr "" - -#: ../PLCControler.py:2331 +msgstr "Intervalo" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "¡La URL no es correcta! Por favor, ingrese una dirección URL válida." + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" -msgstr "" - -#: ../canfestival/config_utils.py:381 +msgstr "Elemento(s) plcopen inválido(s)!" + +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "El tipo \"{a1}\" es inválido para la ubicación \"{a4}\" -> {a2} != {a3} " + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +msgstr "El tipo \"{a1}\" es inválido para la ubicación \"{a4}\" -> {a2} != {a3} " + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" -msgstr "" - -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +msgstr "El valor \"%s\" no es válido para la variable de depuración" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" -msgstr "" - -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +msgstr "El tipo \"%s\" no es valido para el elemento variable" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:195 +msgstr "El tipo \"%s\" no es válido para el bloque de visualización" + +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:121 +msgstr "¡El valor \"{a1}\" es inválido para la variable \"{a2}\"!" + +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" - -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +"¡Valor inválido!\n" +"Debe ingresar un valor numérico." + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "¿La conexión es segura?" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +msgstr "Salto" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" -msgstr "" - -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +msgstr "LD" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "" - -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +"El elemento de escalera con el identificador %d se encuentra en mas de un " +"peldaño." + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:187 +msgstr "Lenguaje" + +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +msgstr "Lenguaje (opcional):" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" -msgstr "" - -#: ../ProjectController.py:1797 +msgstr "Lenguaje:" + +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" - -#: ../Beremiz_service.py:273 +"La última versión coincide con la versión descargada. Transfiriendo de todos" +" modos...\n" + +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" -msgstr "" - -#: ../Beremiz_service.py:272 +msgstr "Inicial el inspector WX GUI" + +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" -msgstr "" - -#: ../editors/Viewer.py:544 +msgstr "Iniciar un shell Python en vivo" + +#: ../editors/Viewer.py:580 msgid "Left" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:63 +msgstr "Izquierda" + +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" -msgstr "" +msgstr "Línea de energía Izquierda" #: ../plcopen/iec_std.csv:81 msgid "Length of string" -msgstr "" +msgstr "Largo de la cadena" #: ../plcopen/iec_std.csv:78 msgid "Less than" -msgstr "" +msgstr "Menor que" #: ../plcopen/iec_std.csv:79 msgid "Less than or equal to" -msgstr "" - -#: ../IDEFrame.py:631 +msgstr "Menor o igual a" + +#: ../IDEFrame.py:652 msgid "Library" -msgstr "" - -#: ../dialogs/AboutDialog.py:151 +msgstr "Librería" + +#: ../dialogs/AboutDialog.py:145 msgid "License" -msgstr "" +msgstr "Licencia" #: ../plcopen/iec_std.csv:73 msgid "Limitation" -msgstr "" - -#: ../targets/toolchain_gcc.py:202 +msgstr "Límite" + +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +msgstr "Enlace:\n" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" -msgstr "" - -#: ../canfestival/canfestival.py:348 +msgstr "Local" + +#: ../canfestival/canfestival.py:359 msgid "Local entries" -msgstr "" - -#: ../ProjectController.py:1703 +msgstr "Entradas locales" + +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" -msgstr "" - -#: ../controls/VariablePanel.py:53 +msgstr "¡La busqueda de servicios locales falló!\n" + +#: ../controls/VariablePanel.py:62 msgid "Location" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:72 +msgstr "Ubicación" + +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" -msgstr "" +msgstr "Ubicaciones disponibles:" #: ../plcopen/iec_std.csv:25 msgid "Logarithm to base 10" -msgstr "" - -#: ../connectors/PYRO/__init__.py:94 +msgstr "Logaritmo en base 10" + +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +msgstr "Fallo de resolución MDNS para '%s\"\n" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" -msgstr "" +msgstr "Asignar Variable" #: ../features.py:31 msgid "Map located variables over CANopen" -msgstr "" - -#: ../canfestival/NetworkEditor.py:106 +msgstr "Asignar la variable ubicada sobre CANOpen" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "Variable mapeadas sobre Modbus " + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" -msgstr "" - -#: ../ConfigTreeNode.py:539 +msgstr "Maestro" + +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " -msgstr "" +msgstr "Se alcanzó la cuenta máxima ({a1}) para el confnode de tipo {a2} " #: ../plcopen/iec_std.csv:71 msgid "Maximum" -msgstr "" - -#: ../editors/DataTypeEditor.py:239 +msgstr "Máximo" + +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +msgstr "Máximo:" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" -msgstr "" - -#: ../IDEFrame.py:599 +msgstr "Memoria" + +#: ../IDEFrame.py:617 msgid "Menu ToolBar" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:49 +msgstr "Menú de la barra de herramientas" + +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" -msgstr "" - -#: ../editors/Viewer.py:549 +msgstr "Microsegundos:" + +#: ../editors/Viewer.py:585 msgid "Middle" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:48 +msgstr "Medio" + +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" -msgstr "" +msgstr "Milisegundos:" #: ../plcopen/iec_std.csv:72 msgid "Minimum" -msgstr "" - -#: ../editors/DataTypeEditor.py:226 +msgstr "Mínimo" + +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:46 +msgstr "Mínimo:" + +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:211 +msgstr "Minutos:" + +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" -msgstr "" - -#: ../dialogs/LDElementDialog.py:63 +msgstr " Misceláneo" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "Soporte Mdbus" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" -msgstr "" - -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +msgstr "Modificador:" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "" - -#: ../dialogs/ActionBlockDialog.py:140 +"Se encontró más de un conector correspondiente a la continuación \"{a1}\" en" +" la POU \"{a2}\"" + +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:139 +msgstr "Mover la acción hacia abajo" + +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" -msgstr "" - -#: ../controls/CustomEditableListBox.py:43 +msgstr "Mover la acción hacia arriba" + +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" -msgstr "" - -#: ../editors/DataTypeEditor.py:355 +msgstr "Mover hacia abajo" + +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" -msgstr "" - -#: ../editors/DataTypeEditor.py:354 +msgstr "Mover el elemento hacia abajo" + +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" -msgstr "" - -#: ../editors/ResourceEditor.py:271 +msgstr "Mover el elemento hacia arriba" + +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" -msgstr "" - -#: ../editors/ResourceEditor.py:270 +msgstr "Mover la instancia hacia abajo" + +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" -msgstr "" - -#: ../editors/ResourceEditor.py:242 +msgstr "Mover la instacia hacia arriba" + +#: ../editors/ResourceEditor.py:255 msgid "Move task down" -msgstr "" - -#: ../editors/ResourceEditor.py:241 +msgstr "Mover la tarea hacia abajo" + +#: ../editors/ResourceEditor.py:254 msgid "Move task up" -msgstr "" - -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +msgstr "Mover la tarea hacia arriba" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" -msgstr "" - -#: ../controls/CustomEditableListBox.py:42 +msgstr "Mover la vista" + +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" -msgstr "" - -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +msgstr "Mover hacia arriba" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" -msgstr "" - -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +msgstr "Mover la variable hacia abajo" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" -msgstr "" +msgstr "Mover la variable hacia arriba" #: ../plcopen/iec_std.csv:74 msgid "Multiplexer (select 1 of N)" -msgstr "" +msgstr "Multiplexor (seleccionar 1 de N)" #: ../plcopen/iec_std.csv:34 msgid "Multiplication" -msgstr "" - -#: ../editors/FileManagementPanel.py:83 +msgstr "Multiplicación" + +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:92 +msgstr "Mi computador:" + +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" -msgstr "" - -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "NOMBRE" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" -msgstr "" - -#: ../Beremiz_service.py:334 +msgstr "Nombre" + +#: ../Beremiz_service.py:342 msgid "Name must not be null!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +msgstr "¡El nombre no debe ser nulo!" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" -msgstr "" +msgstr "Nombre:" #: ../plcopen/iec_std.csv:24 msgid "Natural logarithm" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +msgstr "Logaritmo Natural" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" -msgstr "" +msgstr "Negado" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "El servicio Web Nevow falló." #: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 msgid "Nevow/Athena import failed :" -msgstr "" - -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +msgstr "La importación Nevow/Athena falló:" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" -msgstr "" - -#: ../controls/CustomEditableListBox.py:40 +msgstr "Nuevo" + +#: ../controls/CustomEditableListBox.py:43 msgid "New item" -msgstr "" - -#: ../editors/Viewer.py:518 +msgstr "Nuevo elemento" + +#: ../editors/Viewer.py:553 msgid "No Modifier" -msgstr "" - -#: ../ProjectController.py:1826 +msgstr "Sin modificador" + +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" -msgstr "" - -#: ../PLCGenerator.py:1631 +msgstr "No hay PLC para transferir (¿La construcción tuvo éxito?)\n" + +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" -msgstr "" - -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +msgstr "No hay ningún cuerpo definido en el POU \"%s\"" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" - -#: ../PLCOpenEditor.py:357 +"No se encontró un conector correspondiente a la continuación \"{a1}\" en la " +"POU \"{a2}\"" + +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." msgstr "" - -#: ../PLCGenerator.py:829 +"No hay documentación disponible.\n" +"Próximamente." + +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" -msgstr "" - -#: ../PLCGenerator.py:1194 +msgstr "No se encontró información para el bloque \"%s\"" + +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "" - -#: ../controls/SearchResultPanel.py:169 +"No se encontró una salida de salida {a1} en el bloque {a2} del POU {a3}. La " +"conexión debe estar rota" + +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." -msgstr "" - -#: ../svgui/svgui.py:134 +msgstr "No hay resultados de búsqueda disponibles." + +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" -msgstr "" - -#: ../canfestival/config_utils.py:639 +msgstr "No existe el archivo SVG: %s\n" + +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" -msgstr "" - -#: ../canfestival/config_utils.py:362 +msgstr "No existe el indice/subindice ({a1},{a2}) (variable {a3})" + +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +"No existe el indice/subindice ({a1},{a2}) en elID: {a3} (variable {a4})" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" -msgstr "" - -#: ../PLCGenerator.py:1629 +msgstr "¡No se ha seleccionado un valor válido!" + +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" -msgstr "" - -#: ../canfestival/config_utils.py:355 +msgstr "No se ha definido ninguna variable en el POU \"%s\"" + +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" -msgstr "" - -#: ../controls/VariablePanel.py:64 +msgstr "ID de nodo no existente: {a1} (variable {a2})" + +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 +msgstr "No-Retener" + +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" -msgstr "" - -#: ../canfestival/config_utils.py:389 +msgstr "Normal" + +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" +"Variable no asignable de PDO: '{a1}' (ID: {a2}, Idx: {a3}, sIdx: {a4}))" #: ../plcopen/iec_std.csv:80 msgid "Not equal to" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:89 +msgstr "Diferente de" + +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" -msgstr "" +msgstr "Número de secuencias:" #: ../plcopen/iec_std.csv:22 msgid "Numerical" -msgstr "" - -#: ../editors/CodeFileEditor.py:739 +msgstr "Numéricos" + +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:84 +msgstr "OnChange" + +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" -msgstr "" - -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +msgstr "Solo Elementos" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" -msgstr "" - -#: ../svgui/svgui.py:143 +msgstr "Abrir" + +#: ../svgui/svgui.py:151 msgid "Open Inkscape" -msgstr "" - -#: ../version.py:77 +msgstr "Abrir Inkscape" + +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "" - -#: ../ProjectController.py:1878 +"Sistema para Automatización de código abierto que implementa un un PLC " +"flexible y un entorno de desarrollo con todos los elementos de la IEC 61131 " +"y un conjunto de extensiones en constante crecimiento." + +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:155 +"Abra un explorador de archivos para administrar los archivos del proyecto" + +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "Abrir wxGlade" + +#: ../controls/VariablePanel.py:64 msgid "Option" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +msgstr "Opción" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:98 +msgstr "Opciones" + +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" -msgstr "" - -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +msgstr "Organización (opcional):" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +msgstr "Otro pérfil" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" -msgstr "" - -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +msgstr "Salida" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" -msgstr "" - -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +msgstr "Recepción PDO" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" -msgstr "" - -#: ../targets/toolchain_gcc.py:167 +msgstr "Transmisión PDO" + +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" -msgstr "" - -#: ../BeremizIDE.py:355 +msgstr "PLC:\n" + +#: ../BeremizIDE.py:383 msgid "PLC Log" -msgstr "" - -#: ../ProjectController.py:1054 +msgstr "Registro del PLC" + +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" -msgstr "" - -#: ../Beremiz_service.py:297 +msgstr "¡Falló la generación del código del PLC!\n" + +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." -msgstr "" - -#: ../Beremiz_service.py:304 +msgstr "El PLC está vacío o ya fue iniciado." + +#: ../Beremiz_service.py:312 msgid "PLC is not started." -msgstr "" - -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +msgstr "El PLC no esta iniciado." + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" "{a2}" msgstr "" - -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +"Error de sintaxis del PLC en la línea {a1}:\n" +"{a2}" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" -msgstr "" - -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +msgstr "Archivos PLCOpen (*.xml)|*.xml|Todos los archivos|*.*" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" -msgstr "" - -#: ../PLCOpenEditor.py:365 +msgstr "PLCOpenEditor" + +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" "Beremiz is an " msgstr "" - -#: ../dialogs/DiscoveryDialog.py:95 +"PLCOpenEditor es parte del Proyecto Beremiz.\n" +"\n" +"Beremiz es un" + +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" -msgstr "" - -#: ../dialogs/PouDialog.py:101 +msgstr "PUERTO" + +#: ../dialogs/PouDialog.py:109 msgid "POU Name" -msgstr "" - -#: ../dialogs/PouDialog.py:58 +msgstr "Nombre de POU" + +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" -msgstr "" - -#: ../dialogs/PouDialog.py:103 +msgstr "Nombre de POU:" + +#: ../dialogs/PouDialog.py:111 msgid "POU Type" -msgstr "" - -#: ../dialogs/PouDialog.py:65 +msgstr "Tipo de POU" + +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:45 +msgstr "Tipo de POU:" + +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:61 +msgstr "PYRO se conecta a la URI : %s\n" + +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" -msgstr "" - -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +msgstr "PYRO esta usando los certificados en '%s'\n" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:111 +msgstr "Configuración de página" + +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" -msgstr "" - -#: ../IDEFrame.py:2613 +msgstr "Tamaño de página (opcional):" + +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:124 +msgstr "Página: %d" + +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" -msgstr "" - -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +msgstr "Instancia padre" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" -msgstr "" - -#: ../IDEFrame.py:1868 +msgstr "Pegar" + +#: ../IDEFrame.py:1899 msgid "Paste POU" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:56 +msgstr "Pegar POU" + +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:74 +msgstr "Patrón de búsqueda:" + +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" -msgstr "" - -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +msgstr "Número de PIN:" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" -msgstr "" - -#: ../editors/TextViewer.py:262 +msgstr "Por favor elija un destino" + +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" -msgstr "" - -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +msgstr "Por favor ingrese un nombre de bloque" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" -msgstr "" - -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +msgstr "Por favor ingrese un comentario" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" -msgstr "" - -#: ../Beremiz_service.py:196 +msgstr "Por favor ingrese el nombre del paso" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:163 +msgstr "Por favor ingrese el texto" + +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" -msgstr "" - -#: ../Beremiz_service.py:319 +msgstr "Por favor ingrese un valor para una variable tipo \"%s\":" + +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" -msgstr "" - -#: ../Beremiz_service.py:319 +msgstr "¡El número del puerto debe estar entre 0 y 65535!" + +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" -msgstr "" - -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +msgstr "¡El número del puerto debe ser un entero!" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:51 +msgstr "Línea de energía" + +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" -msgstr "" - -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +msgstr "Propiedades de la Línea de energía" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" -msgstr "" - -#: ../dialogs/BlockPreviewDialog.py:57 +msgstr "Vista previa" + +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" -msgstr "" - -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +msgstr "Vista previa:" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" -msgstr "" - -#: ../IDEFrame.py:1079 +msgstr "Imprimir" + +#: ../IDEFrame.py:1110 msgid "Print preview" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Vista previa de impresión" + +#: ../editors/ResourceEditor.py:76 msgid "Priority" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:90 +msgstr "Prioridad" + +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" -msgstr "" - -#: ../runtime/PLCObject.py:369 +msgstr "Prioridad:" + +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" -msgstr "" - -#: ../dialogs/ProjectDialog.py:58 +msgstr "Problema al iniciar el PLC: error %d" + +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:81 +msgstr "Nombre del Producto" + +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:83 +msgstr "Nombre del Producto (requerido):" + +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" -msgstr "" - -#: ../dialogs/ProjectDialog.py:59 +msgstr "Lanzamiento del Producto (opcional):" + +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:82 +msgstr "Versión del Producto" + +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +msgstr "Versión del Producto (requerido):" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" -msgstr "" - -#: ../PLCOpenEditor.py:347 +msgstr "Programa" + +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" -msgstr "" - -#: ../PLCControler.py:98 +msgstr "¡El programa fue generado con éxito!" + +#: ../plcopen/types_enums.py:76 msgid "Programs" -msgstr "" - -#: ../editors/Viewer.py:243 +msgstr "Programas" + +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +msgstr "¡Los programas no pueden ser usados por otros POUs!" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" -msgstr "" - -#: ../controls/SearchResultPanel.py:173 +msgstr "Proyecto" + +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" -msgstr "" - -#: ../ProjectController.py:1877 +msgstr "Proyecto '%s':" + +#: ../ProjectController.py:1878 msgid "Project Files" -msgstr "" - -#: ../dialogs/ProjectDialog.py:57 +msgstr "Archivos del Proyecto" + +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:79 +msgstr "Nombre del Proyecto" + +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:80 +msgstr "Nombre del Proyecto (requerido):" + +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" -msgstr "" - -#: ../PLCControler.py:3164 +msgstr "Versión del Proyecto (opcional):" + +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" msgstr "" - -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +"Error de sintaxis en el archivo del proyecto:\n" +"\n" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" -msgstr "" - -#: ../ConfigTreeNode.py:566 +msgstr "Propiedades del Proyecto" + +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " -msgstr "" - -#: ../dialogs/ConnectionDialog.py:98 +msgstr "El arbol de proyecto no concuerda con confnode.xml {a1}!={a2}" + +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" -msgstr "" - -#: ../PLCControler.py:99 +msgstr "Propagar Nombre" + +#: ../plcopen/types_enums.py:77 msgid "Properties" -msgstr "" - -#: ../Beremiz_service.py:442 +msgstr "Propiedades" + +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" -msgstr "" - -#: ../connectors/PYRO/__init__.py:118 +msgstr "Publicando el servicio en la red local" + +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" -msgstr "" - -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +msgstr "Excepción de PYRO: %s\n" + +#: ../Beremiz_service.py:420 msgid "Pyro port :" -msgstr "" - -#: ../py_ext/PythonEditor.py:81 +msgstr "Puerto del objeto Pyro:" + +#: ../py_ext/PythonEditor.py:84 msgid "Python code" -msgstr "" - -#: ../features.py:33 +msgstr "Código Python" + +#: ../features.py:34 msgid "Python file" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 +msgstr "Archivo Python" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" -msgstr "" - -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +msgstr "Indice" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +msgstr "Salir" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" -msgstr "" - -#: ../ProjectController.py:1873 +msgstr "Rango:" + +#: ../ProjectController.py:1872 msgid "Raw IEC code" -msgstr "" - -#: ../BeremizIDE.py:1047 +msgstr "Código IEC puro" + +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" -msgstr "" - -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +msgstr "¿Realmente desea borrar el nodo '%s'?" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "Dominio:" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:75 +msgstr "Rehacer" + +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +msgstr "Referencia" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:66 +msgstr "Refrescar" + +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:96 +msgstr "Expresión regular" + +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" -msgstr "" - -#: ../editors/Viewer.py:1603 +msgstr "Expresiones regulares" + +#: ../editors/Viewer.py:1636 msgid "Release value" -msgstr "" +msgstr "Valor de publicación" #: ../plcopen/iec_std.csv:37 msgid "Remainder (modulo)" -msgstr "" - -#: ../BeremizIDE.py:1048 +msgstr "Resto (módulo)" + +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" -msgstr "" - -#: ../IDEFrame.py:2419 +msgstr "Eliminar el nodo %s" + +#: ../IDEFrame.py:2445 msgid "Remove Datatype" -msgstr "" - -#: ../IDEFrame.py:2424 +msgstr "Eliminar el Tipo de Dato" + +#: ../IDEFrame.py:2450 msgid "Remove Pou" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:138 +msgstr "Eliminar POU" + +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" -msgstr "" - -#: ../editors/DataTypeEditor.py:353 +msgstr "Eliminar Acción" + +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" -msgstr "" - -#: ../editors/FileManagementPanel.py:63 +msgstr "Eliminar Elemento" + +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" -msgstr "" - -#: ../editors/ResourceEditor.py:269 +msgstr "Eliminar una archivo de la carpeta a la izquierda" + +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:104 +msgstr "Eliminar una instancia" + +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" -msgstr "" - -#: ../editors/ResourceEditor.py:240 +msgstr "Eliminar esclavo" + +#: ../editors/ResourceEditor.py:253 msgid "Remove task" -msgstr "" - -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +msgstr "Eliminar Tarea" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" -msgstr "" - -#: ../IDEFrame.py:1948 +msgstr "Eliminar Variable" + +#: ../IDEFrame.py:1979 msgid "Rename" -msgstr "" - -#: ../editors/FileManagementPanel.py:181 +msgstr "Renombrar" + +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" -msgstr "" - -#: ../editors/Viewer.py:561 +msgstr "Reemplazar Archivo" + +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" -msgstr "" +msgstr "Reemplazar Cable por Conexiones" #: ../plcopen/iec_std.csv:89 msgid "Replacement (within)" -msgstr "" - -#: ../dialogs/LDElementDialog.py:76 +msgstr "Reemplazo (interno)" + +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" -msgstr "" - -#: ../editors/Viewer.py:642 +msgstr "Reiniciar" + +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" -msgstr "" - -#: ../IDEFrame.py:451 +msgstr "Reiniciar el Orden de Ejecusión" + +#: ../IDEFrame.py:453 msgid "Reset Perspective" -msgstr "" - -#: ../controls/SearchResultPanel.py:105 +msgstr "Restablecer perspectiva" + +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" -msgstr "" - -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +msgstr "Reiniciar los resultados de la busqueda" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" -msgstr "" - -#: ../controls/VariablePanel.py:62 +msgstr "Recursos" + +#: ../controls/VariablePanel.py:77 msgid "Retain" -msgstr "" - -#: ../controls/VariablePanel.py:424 +msgstr "Retener" + +#: ../controls/VariablePanel.py:455 msgid "Return Type:" -msgstr "" - -#: ../editors/Viewer.py:546 +msgstr "Tipo de retorno:" + +#: ../editors/Viewer.py:582 msgid "Right" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:64 +msgstr "Derecha" + +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" -msgstr "" - -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +msgstr "Línea de energía Derecha" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" -msgstr "" +msgstr "Flanco ascendente" #: ../plcopen/iec_std.csv:65 msgid "Rotate left" -msgstr "" +msgstr "Girar a la izquierda" #: ../plcopen/iec_std.csv:64 msgid "Rotate right" -msgstr "" +msgstr "Girar a la derecha" #: ../plcopen/iec_std.csv:17 msgid "Rounding up/down" -msgstr "" - -#: ../ProjectController.py:1841 +msgstr "Redondeo arriba / abajo" + +#: ../ProjectController.py:1828 msgid "Run" -msgstr "" - -#: ../ProjectController.py:1099 +msgstr "Ejecutar" + +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" - -#: ../ProjectController.py:1108 +" ¡Falló la generación del código C de la librería de extensión en runtime!\n" + +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "" - -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +" ¡Falló la generación del código C de la librería de extensión de E/S en " +"runtime!\n" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" -msgstr "" - -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +msgstr "Cliente SDO" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" -msgstr "" - -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +msgstr "Servidor SDO" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" -msgstr "" - -#: ../PLCGenerator.py:1392 +msgstr "SFC" + +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" -msgstr "" - -#: ../PLCGenerator.py:773 +msgstr "El salto SFC en el POU \"{a1}\" se refiere un paso SFC inexistente \"{a2}\"" + +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +msgstr "La transición SFC en el POU \"%s\" debe estar conectada." + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" -msgstr "" - -#: ../PLCOpenEditor.py:334 +msgstr "ST" + +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" -msgstr "" - -#: ../svgui/svgui.py:128 +msgstr "Archivos ST (*.st)|*.st|Todos los archivos|*.*" + +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" -msgstr "" - -#: ../features.py:35 +msgstr "Archivos SVG (*.svg)|*.svg|Todos los archivos|*.*" + +#: ../features.py:36 msgid "SVGUI" -msgstr "" - -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +msgstr "SVGUI" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" -msgstr "" - -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +msgstr "Guardar" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." -msgstr "" - -#: ../BeremizIDE.py:224 +msgstr "Salvar como..." + +#: ../BeremizIDE.py:249 msgid "Save as" -msgstr "" - -#: ../ProjectController.py:511 +msgstr "Salvar como" + +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:69 +msgstr "¡La ruta indicada es la ruta de otro proyecto!\n" + +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" -msgstr "" - -#: ../IDEFrame.py:623 +msgstr "Alcance" + +#: ../IDEFrame.py:644 msgid "Search" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +msgstr "Buscar" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:47 +msgstr "Buscar en el Proyecto" + +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" -msgstr "" - -#: ../IDEFrame.py:388 +msgstr "Segundos:" + +#: ../IDEFrame.py:390 msgid "Select All" -msgstr "" - -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +msgstr "Seleccionar todo" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" -msgstr "" - -#: ../ProjectController.py:1257 +msgstr "Seleccione una clase de variable:" + +#: ../ProjectController.py:1293 msgid "Select an editor:" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:281 +msgstr "Seleccionar un editor:" + +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" -msgstr "" - -#: ../IDEFrame.py:607 +msgstr "Seleccionar una Instancia" + +#: ../IDEFrame.py:628 msgid "Select an object" -msgstr "" - -#: ../ProjectController.py:518 +msgstr "Selecionar un objeto" + +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" +"El directorio seleccionado ya contiene otro proyecto. ¿Desea " +"sobreescribirlo?\n" #: ../plcopen/iec_std.csv:70 msgid "Selection" -msgstr "" +msgstr "Selección" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "Convergencia de selección" #: ../dialogs/SFCDivergenceDialog.py:65 -msgid "Selection Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:64 msgid "Selection Divergence" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:82 +msgstr "Divergencia de selección" + +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:85 +msgstr "Descubrimiento de servicios" + +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" -msgstr "" - -#: ../dialogs/LDElementDialog.py:76 +msgstr "Servicios disponibles:" + +#: ../dialogs/LDElementDialog.py:79 msgid "Set" -msgstr "" +msgstr "Set" #: ../plcopen/iec_std.csv:62 msgid "Shift left" -msgstr "" +msgstr "Desplazamiento a la izquierda" #: ../plcopen/iec_std.csv:63 msgid "Shift right" -msgstr "" - -#: ../ProjectController.py:1867 +msgstr "Desplazamiento a la derecha" + +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" -msgstr "" - -#: ../canfestival/canfestival.py:389 +msgstr "Mostrar el código IEC generado por PLCGenerator " + +#: ../canfestival/canfestival.py:407 msgid "Show Master" -msgstr "" - -#: ../canfestival/canfestival.py:390 +msgstr "Mostrar el Maestro" + +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" -msgstr "" - -#: ../ProjectController.py:1865 +msgstr "Mostrar el Maestro generado por config_utils" + +#: ../ProjectController.py:1862 msgid "Show code" -msgstr "" +msgstr "Mostrar código" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "Divergencia simultanea" #: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Simultaneous Divergence" -msgstr "" +msgstr "Convergencia simultanea" #: ../plcopen/iec_std.csv:27 msgid "Sine" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Seno" + +#: ../editors/ResourceEditor.py:76 msgid "Single" -msgstr "" - -#: ../targets/toolchain_makefile.py:126 +msgstr "Sencilla" + +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" -msgstr "" - -#: ../PLCGenerator.py:397 +msgstr "La fuente no cambió. No se ejecuta la construcción.\n" + +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " "'{a2}.{a3}'." msgstr "" +"Se debe definir la señal de origen para la tarea única '{a1}' en el recurso " +"'{a2}.{a3}'" #: ../plcopen/iec_std.csv:23 msgid "Square root (base 2)" -msgstr "" - -#: ../plcopen/definitions.py:48 +msgstr "Raíz cuadrada (base 2)" + +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" -msgstr "" - -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +msgstr "Bloques de función estandar" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" -msgstr "" - -#: ../ProjectController.py:1046 +msgstr "Iniciar PLC" + +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" -msgstr "" - -#: ../ProjectController.py:1360 +msgstr "Iniciar la construcción en %s\n" + +#: ../ProjectController.py:1397 msgid "Started" -msgstr "" - -#: ../ProjectController.py:1648 +msgstr "Iniciado" + +#: ../ProjectController.py:1633 msgid "Starting PLC\n" -msgstr "" - -#: ../BeremizIDE.py:365 +msgstr "Iniciando el PLC\n" + +#: ../BeremizIDE.py:393 msgid "Status ToolBar" -msgstr "" - -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +msgstr "Barra de Estados" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" -msgstr "" - -#: ../ProjectController.py:1846 +msgstr "Paso" + +#: ../ProjectController.py:1835 msgid "Stop" -msgstr "" - -#: ../Beremiz_service.py:264 +msgstr "Detener" + +#: ../Beremiz_service.py:272 msgid "Stop PLC" -msgstr "" - -#: ../ProjectController.py:1848 +msgstr "Detener el PLC" + +#: ../ProjectController.py:1836 msgid "Stop Running PLC" -msgstr "" - -#: ../ProjectController.py:1361 +msgstr "Detener el PLC en ejecusión" + +#: ../ProjectController.py:1398 msgid "Stopped" -msgstr "" - -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Detenido" + +#: ../editors/DataTypeEditor.py:60 msgid "Structure" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Estructura" + +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" -msgstr "" +msgstr "Subrango" #: ../plcopen/iec_std.csv:35 msgid "Subtraction" -msgstr "" - -#: ../ProjectController.py:1085 +msgstr "Substracción" + +#: ../ProjectController.py:1113 msgid "Successfully built.\n" -msgstr "" - -#: ../IDEFrame.py:447 +msgstr "Construido con éxito.\n" + +#: ../IDEFrame.py:449 msgid "Switch perspective" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +msgstr "Cambiar la perspectiva" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:93 +msgstr "¡Error de sintaxis en la expresión del patrón de busqueda!" + +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" -msgstr "" +msgstr "TIPO" #: ../plcopen/iec_std.csv:29 msgid "Tangent" -msgstr "" - -#: ../editors/ResourceEditor.py:83 +msgstr "Tangente" + +#: ../editors/ResourceEditor.py:97 msgid "Task" -msgstr "" - -#: ../editors/ResourceEditor.py:235 +msgstr "Tarea" + +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" -msgstr "" - -#: ../controls/VariablePanel.py:73 +msgstr "Tareas:" + +#: ../controls/VariablePanel.py:91 msgid "Temp" -msgstr "" - -#: ../version.py:30 +msgstr "Temporal" + +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3158,757 +3226,932 @@ "You can subscribe to the list here:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" - -#: ../editors/FileManagementPanel.py:180 +"El mejor lugar para preguntar sobre Beremiz/PLCOpenEditor es a través de la lista de correos: \n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"Este es el canal principal de soporte de la comunidad.\n" +"Para escribir en ella se requiere estar subscrito a la lista de correos.\n" +"\n" +"Puedes hacerlo en la siguiente dirección:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" + +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" - -#: ../editors/LDViewer.py:882 +"El archivo '%s' ya existe.\n" +"¿Desea reemplazarlo?" + +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" -msgstr "" - -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +msgstr "¡El grupo de bloques debe ser coherente!" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" -msgstr "" - -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +msgstr "Han habido cambios, ¿Desea salvar los cambios realizados?" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "" - -#: ../IDEFrame.py:1102 +"Ya existe un POU llamado \"%s\". Esto puede causar conflictos. ¿Desea " +"continuar?" + +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "" - -#: ../editors/LDViewer.py:891 +"Hubo un problema en la impresión.\n" +"¿Tal vez la impresora actual no esta configurada correctamente? " + +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +msgstr "¡Esta opción no esta disponible aún!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" -msgstr "" +msgstr "Tick: %d" #: ../plcopen/iec_std.csv:40 msgid "Time" -msgstr "" +msgstr "Tiempo" #: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 msgid "Time addition" -msgstr "" +msgstr "Suma de Tiempo" #: ../plcopen/iec_std.csv:86 msgid "Time concatenation" -msgstr "" +msgstr "Concatenación de Tiempo" #: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 msgid "Time division" -msgstr "" +msgstr "División de Tiempo" #: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 msgid "Time multiplication" -msgstr "" +msgstr "Multiplicación de Tiempo" #: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 msgid "Time subtraction" -msgstr "" +msgstr "Resta de Tiempo" #: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 msgid "Time-of-day addition" -msgstr "" +msgstr "Suma de Time-of-day" #: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 #: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 msgid "Time-of-day subtraction" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:172 +msgstr "Resta de Time-of-day" + +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" -msgstr "" - -#: ../editors/Viewer.py:548 +msgstr "Alternar Valor" + +#: ../editors/Viewer.py:584 msgid "Top" -msgstr "" - -#: ../ProjectController.py:1855 +msgstr "Arriba" + +#: ../ProjectController.py:1848 msgid "Transfer" -msgstr "" - -#: ../ProjectController.py:1857 +msgstr "Transferir" + +#: ../ProjectController.py:1849 msgid "Transfer PLC" -msgstr "" - -#: ../ProjectController.py:1820 +msgstr "Transferir PLC" + +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" -msgstr "" - -#: ../ProjectController.py:1823 +msgstr "Transferencia completada con éxito.\n" + +#: ../ProjectController.py:1805 msgid "Transfer failed\n" -msgstr "" - -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +msgstr "Transferencia fallida\n" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" -msgstr "" - -#: ../PLCGenerator.py:1518 +msgstr "Transición " + +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "" - -#: ../dialogs/PouTransitionDialog.py:84 +"El cuerpo de transición \"%s\" debe contener una variable de salida o bobina" +" que haga referencia a su nombre" + +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:53 +msgstr "Nombre de transición " + +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" -msgstr "" - -#: ../PLCGenerator.py:1609 +msgstr "Nombre de transición:" + +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" - -#: ../PLCGenerator.py:1598 +"La transición con contenido \"{a1}\" no esta conectada al siguiente paso en " +"la POU \"{a2}\"" + +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" - -#: ../plcopen/plcopen.py:1323 +"La transición con contenido \"{a1}\" no esta conectada al paso previo en la " +"POU \"{a2}\"" + +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" -msgstr "" - -#: ../PLCControler.py:98 +msgstr "¡La transición con el nombre %s no existe!" + +#: ../plcopen/types_enums.py:76 msgid "Transitions" -msgstr "" - -#: ../dialogs/AboutDialog.py:131 +msgstr "Transiciones" + +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Traducido por" + +#: ../editors/ResourceEditor.py:76 msgid "Triggering" -msgstr "" - -#: ../Beremiz_service.py:478 +msgstr "Tipo de tarea" + +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "El servicio web twisted no esta disponible." + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:49 +msgstr "Tipo" + +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" -msgstr "" - -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +msgstr "Tipo y derivados" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" -msgstr "" +msgstr "Conflicto de tipos para la ubicación \"%s\"" #: ../plcopen/iec_std.csv:16 msgid "Type conversion" -msgstr "" - -#: ../editors/DataTypeEditor.py:162 +msgstr "Conversión de Tipos" + +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:50 +msgstr "Información del tipo:" + +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +msgstr "Mismo tipo" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" -msgstr "" - -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +msgstr "Tipo:" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "Dirección URI del Host:" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "Puerto URI del Host:" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "Tipo de dirección URI:" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" -msgstr "" - -#: ../targets/Xenomai/__init__.py:39 +msgstr "No se puede definir la asignación de PDO para el nodo %02x" + +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" -msgstr "" - -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +msgstr "No se puede obtener el %s de Xenomai\n" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:254 +msgstr "El tipo de bloque \"{a1}\" no esta definido en el POU \"{a2}\" " + +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" -msgstr "" - -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +msgstr "El Tipo de POU \"%s\" no esta definido " + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" -msgstr "" - -#: ../ProjectController.py:423 +msgstr "Deshacer" + +#: ../ProjectController.py:442 msgid "Unknown" -msgstr "" - -#: ../editors/Viewer.py:394 +msgstr "Desconocido" + +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" -msgstr "" - -#: ../ProjectController.py:420 ../ProjectController.py:421 +msgstr "¡La variable \"%s\" no existe en este POU!" + +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" -msgstr "" - -#: ../PLCControler.py:638 +msgstr "Sin nombre" + +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" -msgstr "" - -#: ../controls/VariablePanel.py:284 +msgstr "Desconocido%d" + +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" -msgstr "" - -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +msgstr "No se reconoce el tamaño de datos \"%s\"" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" -msgstr "" - -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +msgstr "Tipo de datos de usuario" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" -msgstr "" - -#: ../PLCControler.py:97 +msgstr "Tipo de Usuario" + +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 +msgstr "POUs definidos por el usuario" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:259 +msgstr "Valor" + +#: ../editors/DataTypeEditor.py:267 msgid "Values:" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +msgstr "Valores:" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" -msgstr "" - -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +msgstr "Variable" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:64 +msgstr "Soltar Variable" + +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" -msgstr "" - -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +msgstr "Propiedades de la Variable" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" -msgstr "" - -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +msgstr "Clase de Variable" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" -msgstr "" - -#: ../dialogs/LDElementDialog.py:89 +msgstr "¡La variable no pertenece a este POU!" + +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" -msgstr "" - -#: ../controls/VariablePanel.py:72 +msgstr "Variable:" + +#: ../controls/VariablePanel.py:90 msgid "Variables" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:152 +msgstr "Variables" + +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" -msgstr "" - -#: ../Beremiz_service.py:588 +msgstr "Vertical:" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "Falló la conexión al cliente WAMP (%s) ..Reintentando ." + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "Se ha perdido la conexión al cliente WAMP (%s) ..Reintentando ..." + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "WAMP ID:" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "Conectando al Cliente WAMP:" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "¡No se ha establecido la conexión al cliente WAMP!" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " -msgstr "" - -#: ../connectors/WAMP/__init__.py:91 +msgstr "El inicio del cliente WAMP falló." + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "La configuración WAMP es incompleta" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "La configuración WAMP no se encuentra" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" -msgstr "" - -#: ../connectors/WAMP/__init__.py:131 +msgstr "Conexión WAMP a la URL: %s\n" + +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" -msgstr "" - -#: ../connectors/WAMP/__init__.py:150 +msgstr "Tiempo de espera para la conexión WAMP agotado" + +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" -msgstr "" - -#: ../Beremiz_service.py:564 +msgstr "La conexión WAMP a '%s' falló.\n" + +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:37 +msgstr "La importación WAMP falló" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "Error en la carga WAMP" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "Termino la sesión WAMP" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" -msgstr "" - -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +msgstr "WXGLADE GUI" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "Error de carga del clave WAMP:" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" -msgstr "" - -#: ../ProjectController.py:707 +msgstr "Advertencia" + +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:78 +msgstr "Alertas en el generador de código ST/IL/SFC:\n" + +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:120 +msgstr "Todo el Proyecto" + +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:91 +msgstr "Ancho:" + +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" -msgstr "" - -#: ../dialogs/AboutDialog.py:130 +msgstr "Búsqueda desde el inicio" + +#: ../dialogs/AboutDialog.py:126 msgid "Written by" -msgstr "" - -#: ../features.py:34 +msgstr "Escrito por" + +#: ../features.py:35 msgid "WxGlade GUI" -msgstr "" - -#: ../svgui/svgui.py:142 +msgstr "WxGlade GUI" + +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:154 +"No tiene permisos de escritura.\n" +"¿Desea abrir Inkscape de todos modos?" + +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" msgstr "" - -#: ../ProjectController.py:371 +"No tiene permisos de escritura.\n" +"¿Desea abrir wxGlade de todos modos?" + +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" msgstr "" - -#: ../editors/LDViewer.py:886 +"Debe tener permiso para trabajar en el proyecto\n" +"¿Desea trabajar en un copia del proyecto?" + +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "" - -#: ../editors/LDViewer.py:666 +"¡Debe seleccionar el bloque o grupo de bloques en torno al cual se debe " +"añadir la rama!" + +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +msgstr "¡debe seleccionar el cable donde se añadirá el contacto!" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:193 +msgstr "¡Debe escribir un nombre!" + +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" -msgstr "" - -#: ../IDEFrame.py:438 +msgstr "¡Debe escribir un valor!" + +#: ../IDEFrame.py:440 msgid "Zoom" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:155 +msgstr "Escala" + +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" -msgstr "" - -#: ../PLCOpenEditor.py:343 +msgstr "días" + +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" -msgstr "" - -#: ../util/ProcessLogger.py:169 +msgstr "error: %s\n" + +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" -msgstr "" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +msgstr "Terminado con estatus {a1} (pid {a2})\n" + +#: ../dialogs/PouDialog.py:36 msgid "function" -msgstr "" - -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +msgstr "función" + +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:155 +msgstr "functionBlock" + +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" -msgstr "" - -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:157 +msgstr "horas" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "No se encuentra una instalación de matiec\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 +msgstr "milisegundos" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" -msgstr "" - -#: ../dialogs/PouDialog.py:32 +msgstr "minutos" + +#: ../dialogs/PouDialog.py:36 msgid "program" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 +msgstr "programa" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" -msgstr "" +msgstr "segundos" #: ../plcopen/iec_std.csv:84 msgid "string from the middle" -msgstr "" +msgstr "cadena desde el medio" #: ../plcopen/iec_std.csv:82 msgid "string left of" -msgstr "" +msgstr "cadena a la izquierda de" #: ../plcopen/iec_std.csv:83 msgid "string right of" -msgstr "" - -#: ../Beremiz.py:164 +msgstr "cadena a la derecha de" + +#: ../Beremiz.py:167 msgid "update info unavailable." -msgstr "" - -#: ../PLCOpenEditor.py:341 +msgstr "Información de actualización no disponible." + +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" -msgstr "" - -#: ../PLCControler.py:972 +msgstr "Alerta: %s\n" + +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." -msgstr "" - -#: ../ConfigTreeNode.py:56 +msgstr "{a1} \"{a2}\" no se puede pegar como un {a3}." + +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" +"{a1} El archivo XML no sigue el esquema XSD en la línea {a2}:\n" +"{a3}" #: Extra XSD strings msgid "CanFestivalSlaveNode" -msgstr "" +msgstr "CanFestivalSlaveNode" msgid "CAN_Device" -msgstr "" +msgstr "CAN_Device" msgid "CAN_Baudrate" -msgstr "" +msgstr "CAN_Baudrate" msgid "NodeId" -msgstr "" +msgstr "NodeId" msgid "Sync_Align" -msgstr "" +msgstr "Sync_Align" msgid "Sync_Align_Ratio" -msgstr "" +msgstr "Sync_Align_Ratio" msgid "CanFestivalNode" -msgstr "" +msgstr "CanFestivalNode" msgid "Sync_TPDOs" -msgstr "" +msgstr "Sync_TPDOs" msgid "CanFestivalInstance" -msgstr "" +msgstr "CanFestivalInstance" msgid "CAN_Driver" -msgstr "" +msgstr "CAN_Driver" msgid "Generic" -msgstr "" +msgstr "Genérico " msgid "Command" -msgstr "" +msgstr "Comando" msgid "Xenomai" -msgstr "" +msgstr "Xenomai" msgid "XenoConfig" -msgstr "" +msgstr "XenoConfig" msgid "Compiler" -msgstr "" +msgstr "Compilador" msgid "CFLAGS" -msgstr "" +msgstr "CFLAGS" msgid "Linker" -msgstr "" +msgstr "Enlazador" msgid "LDFLAGS" -msgstr "" +msgstr "LDFLAGS" msgid "Linux" -msgstr "" +msgstr "Linux" msgid "Win32" -msgstr "" +msgstr "Win32" + +msgid "ModbusRequest" +msgstr "SolicitudModbus" + +msgid "SlaveID" +msgstr "Identificador del esclavo" + +msgid "Nr_of_Channels" +msgstr "Numero_canales" + +msgid "Start_Address" +msgstr "Direccion_Inicio" + +msgid "Timeout_in_ms" +msgstr "Timeout_en_ms" + +msgid "MemoryArea" +msgstr "AreaMemoria" + +msgid "MemoryAreaType" +msgstr "TipoAreaMemoria" + +msgid "ModbusTCPclient" +msgstr "ClienteTCPModbus" + +msgid "Remote_IP_Address" +msgstr "Direccón_IP_Remota" + +msgid "Remote_Port_Number" +msgstr "Puerto_Remoto" + +msgid "Invocation_Rate_in_ms" +msgstr "Invocation_Rate_in_ms" + +msgid "ModbusServerNode" +msgstr "NodoServidorModbus" + +msgid "Local_IP_Address" +msgstr "Direccion_IP_Local" + +msgid "Local_Port_Number" +msgstr "Numero_Puerto_Local" + +msgid "ModbusRTUclient" +msgstr "ClienteModbusRTU" + +msgid "Serial_Port" +msgstr "Puerto_Serial" + +msgid "Baud_Rate" +msgstr "Velocidad" + +msgid "Parity" +msgstr "Paridad" + +msgid "Stop_Bits" +msgstr "Bits_Parada" + +msgid "ModbusRTUslave" +msgstr "EsclavoModbusRTU" + +msgid "ModbusRoot" +msgstr "RaizModbus" + +msgid "MaxRemoteTCPclients" +msgstr "MaxRemoteTCPclients" msgid "BaseParams" -msgstr "" +msgstr "BaseParams" msgid "IEC_Channel" -msgstr "" +msgstr "IEC_Channel" msgid "Enabled" -msgstr "" +msgstr "Habilitado" msgid "BeremizRoot" -msgstr "" +msgstr "BeremizRoot" msgid "TargetType" -msgstr "" +msgstr "TargetType" msgid "Libraries" -msgstr "" +msgstr "Librerías" msgid "URI_location" -msgstr "" +msgstr "Ubicacion_URL" msgid "Disable_Extensions" -msgstr "" +msgstr "Deshabilitar_extensiones" msgid "%(codefile_name)s" -msgstr "" +msgstr "%(codefile_name)s" msgid "variables" -msgstr "" +msgstr "variables" msgid "variable" -msgstr "" +msgstr "variable" msgid "name" -msgstr "" +msgstr "nombre" msgid "type" -msgstr "" +msgstr "tipo" msgid "class" -msgstr "" +msgstr "clase" msgid "initial" -msgstr "" +msgstr "inicial" msgid "desc" -msgstr "" +msgstr "desc" msgid "onchange" -msgstr "" +msgstr "En cambio" msgid "opts" -msgstr "" +msgstr "opts" #: Extra TC6 documentation strings msgid "0 - current time, 1 - load time from PDT" -msgstr "" +msgstr "0 - tiempo actual, 1 - cargar tiempo desde PDT " msgid "Preset datetime" -msgstr "" +msgstr "Tiempo predeterminado" msgid "Copy of IN" -msgstr "" +msgstr "Copia de IN" msgid "Datetime, current or relative to PDT" -msgstr "" +msgstr "Fecha y hora, actual o relativa al PDT" msgid "" "The real time clock has many uses including time stamping, setting dates and" " times of day in batch reports, in alarm messages and so on." msgstr "" +"El reloj de tiempo real tiene muchos usos, incluyendo marca de tiempo y la " +"configuracion de fecha y hora en reportes de lotes, mensajes de alarma, " +"etc.. " msgid "1 = integrate, 0 = hold" -msgstr "" +msgstr "1 = integrar, 0 = mantener" msgid "Overriding reset" -msgstr "" +msgstr "Anulación de reset" msgid "Input variable" -msgstr "" +msgstr "Variable de entrada" msgid "Initial value" -msgstr "" +msgstr "Valor inicial" msgid "Sampling period" -msgstr "" +msgstr "Período de muestreo" msgid "NOT R1" -msgstr "" +msgstr "NOT R1" msgid "Integrated output" -msgstr "" +msgstr "Salida integrada" msgid "" "The integral function block integrates the value of input XIN over time." msgstr "" +"El bloque de función integral, integra el valor de la entrada XIN en el " +"tiempo." msgid "0 = reset" -msgstr "" +msgstr "0 = reset" msgid "Input to be differentiated" -msgstr "" +msgstr "Entrada a ser diferenciada" msgid "Differentiated output" -msgstr "" +msgstr "Salida diferenciada" msgid "" "The derivative function block produces an output XOUT proportional to the " "rate of change of the input XIN." msgstr "" +"El bloque derivativo produce una salida XOUT proporcional a la velocidad de " +"cambio de la entrada XIN." msgid "0 - manual , 1 - automatic" -msgstr "" +msgstr "0 - manual, 1 - automático" msgid "Process variable" -msgstr "" +msgstr "Variable de proceso" msgid "Set point" -msgstr "" +msgstr "Punto de ajuste" msgid "Manual output adjustment - Typically from transfer station" msgstr "" +"Ajuste de salida manual - Típicamente desde la estación de transferencia" msgid "Proportionality constant" -msgstr "" +msgstr "Constante proporcional" msgid "Reset time" -msgstr "" +msgstr "Tiempo de reset" msgid "Derivative time constant" -msgstr "" +msgstr "Constante de tiempo derivativo" msgid "PV - SP" -msgstr "" +msgstr "PV-SP" msgid "FB for integral term" -msgstr "" +msgstr "FB para el término integral" msgid "FB for derivative term" -msgstr "" +msgstr "FB para el término derivativo" msgid "" "The PID (proportional, Integral, Derivative) function block provides the " "classical three term controller for closed loop control." msgstr "" +"El bloque PID (Propocional, Integral, Derivativo) provee el clásico " +"controlador de tres términos para el control de lazo cerrado. " msgid "0 - track X0, 1 - ramp to/track X1" -msgstr "" +msgstr "0 - seguir X0, 1 - rampa a/seguir X1" msgid "Ramp duration" -msgstr "" +msgstr "Duración de rampa" msgid "BUSY = 1 during ramping period" -msgstr "" +msgstr "BUSY=1 durante el período de rampa." msgid "Elapsed time of ramp" -msgstr "" +msgstr "Tiempo transcurrido de la rampa" msgid "The RAMP function block is modelled on example given in the standard." -msgstr "" +msgstr "El bloque RAMPA se modela del ejemplo dado en el estandard." msgid "" "The hysteresis function block provides a hysteresis boolean output driven by" " the difference of two floating point (REAL) inputs XIN1 and XIN2." msgstr "" +"El bloque de histéresis proporciona una salida booleana de histéresis " +"impulsada por la diferencia de dos entradas de coma flotante (REAL) XIN1 y " +"XIN2." msgid "The SR bistable is a latch where the Set dominates." -msgstr "" +msgstr "El biestable SR es un enclavamiento donde la entrada SET es dominante" msgid "The RS bistable is a latch where the Reset dominates." msgstr "" +"El biestable RS es un enclavamiento donde la entrada RESET es dominante" msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." -msgstr "" +"exclusive access to certain resources." +msgstr "" +"El semáforo provee un mecanismo para permitir a elementos de software el " +"acceso mutuamente exclusivo de un recurso especifico. " msgid "The output produces a single pulse when a rising edge is detected." msgstr "" +"La salida produce un pulso único cuando se detecta en la entrada un flanco " +"ascendente." msgid "The output produces a single pulse when a falling edge is detected." msgstr "" +"La salida produce un pulso único cuando se detecta en la entrada un flanco " +"descendente." msgid "" "The up-counter can be used to signal when a count has reached a maximum " "value." msgstr "" +"El contador ascendente puede ser usado para indicar cuando una cuenta ha " +"alcanzado su valor máximo predeternimado." msgid "" "The down-counter can be used to signal when a count has reached zero, on " "counting down from a preset value." msgstr "" +"El contador descendente puede ser usado para indicar cuando una cuenta " +"regresiva iniciada desde un valor predeterminado ha alcanzado el cero." msgid "" "The up-down counter has two inputs CU and CD. It can be used to both count " "up on one input and down on the other." msgstr "" +"El contador arriba-abajo tiene dos entradas, CU y CD. Puede ser usado tanto " +"para contar hacia arriba con la entrada CU, como para contar hacia abajo con" +" la entrada CD." msgid "first input parameter" -msgstr "" +msgstr "primer parámetro de entrada" msgid "second input parameter" -msgstr "" +msgstr "segundo parámetro de entrada" msgid "first output parameter" -msgstr "" +msgstr "primer parámetro de salida" msgid "second output parameter" -msgstr "" +msgstr "segundo parámetro de salida" msgid "internal state: 0-reset, 1-counting, 2-set" -msgstr "" +msgstr "estado interno: 0-reset, 1-contando, 2-set" msgid "" "The pulse timer can be used to generate output pulses of a given time " "duration." msgstr "" +"El temporizador de pulso puede ser usado para generar un pulso de salida con" +" una duración determinada." msgid "" "The on-delay timer can be used to delay setting an output true, for fixed " "period after an input becomes true." msgstr "" +"El temporizador con retraso para activar puede ser usado para activar una " +"salida, un tiempo fijo después de la activación de una entrada." msgid "" "The off-delay timer can be used to delay setting an output false, for fixed " "period after input goes false." msgstr "" +"El temporizador con retraso para desactivar puede ser usado para desactivar " +"una salida, un tiempo fijo después de la desactivación de una entrada." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_fr_FR.po --- a/i18n/Beremiz_fr_FR.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_fr_FR.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,15 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Andrey Skvortsov , 2017 -# Fabien M , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Fabien M , 2017\n" "Language-Team: French (France) (https://www.transifex.com/beremiz/teams/75746/fr_FR/)\n" "MIME-Version: 1.0\n" @@ -20,7 +18,7 @@ "Language: fr_FR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -44,153 +42,158 @@ "Vous devriez redémarrer le programme.\n" "Trace:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " Externe" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr " Entrée-Sortie" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr " Entrée" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " Locale" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr " Sortie" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr " Temporaire" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr " et %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" -msgstr "la construction a échouée !\n" - -#: ../plcopen/plcopen.py:886 +msgstr "la génération a échouée !\n" + +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "Le type de donnée \"%s\" n'existe pas !!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "Le POU \"%s\" existe déjà !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "Le POU \"%s\" n'existe pas !!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" ne peut pas s'utiliser lui-même !" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "La configuration \"%s\" existe déjà !" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "La configuration \"%s\" existe déjà !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "La configuration \"%s\" n'existe pas !!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "Le type de données \"%s\" existe déjà !" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "Un élément \"%s\" existe déjà dans ce POU !" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "Le dossier \"%s\" ne contient pas de projet Beremiz valide\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" est un mot réservé. Il ne peut être utilisé !" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" n'est pas une valeur valide !" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" n'est pas un répertoire valide !" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" n'est pas un identifiant valide !" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "" "\"%s\" est utilisé par un POU ou plus. Souhaitez vous continuer malgré tout " "?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "Le POU \"%s\" existe déjà !" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "L'étape \"%s\" existe déjà !" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "La valeur \"%s\" est déjà définie !" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" n'est pas une dimension de tableau valide !" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -199,200 +202,196 @@ "\"%s\" n'est pas une dimension de tableau valide !\n" "La valeur de droite doit être supérieur à celle de gauche." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "Fonction \"{a1}\" annulée dans \"{a2}\" POU: Pas d'entrée connectée" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" est déjà utilisé par \"{a2}\"!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "La ressource \"{a1}\" existe déjà dans la configuration \"{a2}\" !" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "La ressource \"${a1}\" n'existe pas dans la configuration \"{a2}\" !" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dj" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%ds" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "Types de données de %s" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "POUs de %s" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "Profil %s" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "Le code d'un %s n'a pas d'instances !" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "Le code d'un %s n'a pas de texte !" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Ajouter un élément" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Close" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Configuration" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Type de donnée" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Supprimer" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Affichage" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Editer" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Fichier" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Fonction" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Aide" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&License" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Programme" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Propriétés" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "Projets &récent" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Ressource" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} concordent dans le projet" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} concordent dans le projet" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' est situé dans {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d correspondances)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- Sélectionnez le type d'URI -" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1j" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1h" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -401,9 +400,9 @@ "Un POU a un élément nommé \"%s\". Cela peut générer des conflits. Voulez-" "vous continuer ?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "Un POU nommé \"%s\" existe déjà !" @@ -413,26 +412,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Un enfant nommé \"{a1}\" existe déjà -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Une adresse doit être sélectionné !" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Une tâche du même nom existe déjà" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Une variable nommée \"%s\" existe déjà dans ce POU !" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Une variable avec le nom \"%s\" existe déjà !" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "A propos" @@ -440,126 +439,126 @@ msgid "Absolute number" msgstr "Nombre absolu" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Action" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Ajouter un bloc fonctionnel" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Nom de l'action" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Nom de l'action :" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "L'action nommée %s n'existe pas !" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Actions" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Actions :" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Actif" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Ajouter" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Ajouter une action" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "" "Ajoute un code C ayant accès à des variables localisées de façon synchrone" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Ajouter une configuration" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Ajouter un type de donnée" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Ajouter une branche à la divergence" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "Ajouter IP" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "Ajouter un POU" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Ajoute un code Python executé de façon asynchone" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Ajouter une resource" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Ajouter une transition" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Ajouter un segment au fil" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Ajouter une nouvelle étape initiale" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Ajouter un nouveau renvoi" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Ajouter une nouvelle étape" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Ajoute une interface simple utilisant WxGlade" -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Ajouter une action" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Ajouter un élément" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Ajouter une instance" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Ajouter un esclave" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Ajouter une tâche" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Ajouter une variable" @@ -567,44 +566,44 @@ msgid "Addition" msgstr "Addition" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "Blocs fonctionnels additionnels" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Ajuster la taille des blocs" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Alignement" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Tout" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Tous les fichiers|*.*|Fichiers CSV (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Déjà connecté. Veuillez déconnecter\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Un élément nommé \"%s\" existe déjà dans la structure !" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Une instance avec le même nom existe déjà !" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "" "Appliquer la modification de nom à toutes les prolongements portant ce même " @@ -626,8 +625,8 @@ msgid "Arithmetic" msgstr "Arithmétique" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Tableau" @@ -635,45 +634,37 @@ msgid "Assignment" msgstr "Assignation" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Au moins une variable ou une expression doit être sélectionné !" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Auteur" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Nom de l'auteur (optionel) :" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Vers le haut" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Mauvais nom de domaine (circulaire) à l'adresse" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Mauvais nom de domaine à l'adresse" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "Mauvaise taille d'adresse : %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Type de base :" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Types de base" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -705,85 +696,85 @@ msgid "Bitwise inverting" msgstr "Inversion bit à bit" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Block" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Propriétés du bloc" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Nom du bloc" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Bas" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "Cassé" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "Explorer la liste des valeurs du paramètre '%s'" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "Naviger dans les adresses" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "Compiler" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "Le répertoire de compilation est déjà nettoyé\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "Compiler le projet dans le répertoire ce compilation" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "La compilation du C a mal fonctionné !\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "La compilation du C a échouée !\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "Code C" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "Code C généré avec succès.\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "La compilation a échouée\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "La compilation C de %s a échouée.\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "Extension C" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "C&redits" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "Réseau CANOpen" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "Esclave CANOpen" @@ -791,36 +782,36 @@ msgid "CANopen support" msgstr "Support CANopen" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "L'ordre d'exécution ne peut être généré que dans les FBD !" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "" "Une adresse ne peut être affecté qu'à des variables locales ou globales" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "Le programme n'a pu être généré dans le fichier \"%s\" !" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "Une adresse ne peut être affectée à une instance de Function Block" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "Le projet n'a pu être sauvé dans le fichier \"%s\" !" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" "Une valeur initiale ne peut être affectée une instance de Function Block" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "Impossible de créer l'enfant {a1} de type {a2}" @@ -830,15 +821,15 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "Impossible de trouver un numéro IEC inférieur à %d libre\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "Impossible d'obtenir le statut de l'automate - la connexion a échoué.\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "Impossible d'ouvrir ou d'analyser le fichier VARIABLES.csv !\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " @@ -847,31 +838,37 @@ "Impossible de configurer l'offset du bit de la variable non booléenne '{a1}'" " (ID:{a2},Idx:{a3},sIdx:{a4}))" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" +"Impossible de transférer lorsque l'API est en cours d'exécution. Arrêter " +"maintenant?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "Respecter la casse" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "Centre" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "Changer l'adresse IP de l'interface à lier" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Changer le nom" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "Changer le type du POU pour" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "Changer le numéro de port" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "Changer le dossier de travail" @@ -879,118 +876,122 @@ msgid "Character string" msgstr "Chaîne de caractères" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Choisissez un fichier SVG" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Choisissez un dossier où enregistrer le projet" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Choisissez un fichier" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Choisissez un projet" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Choisissez une valeur pour le paramètre %s :" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Choisissez un dossier de travail" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Choisissez un dossier où créer le projet" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" "Le répertoire ne contient pas de programme. Ce n'est pas un projet valide !" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" "Le répertoire n'est pas vide. Vous ne pouvez pas l'utiliser pour créer un " "nouveau projet !" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Classe" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Filtre de classe :" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Classe :" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Nettoyer" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Nettoyer les messages de log" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Nettoyer le répertoire de compilation" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Répertoire de compilation en cours de nettoyage\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Effacer les erreurs" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Effacer l'ordre d'exécution" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Fermer" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Fermer l'application" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Fermer le projet" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Fermer l'onglet" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Relai" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Commentaire" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" -msgstr "" - -#: ../dialogs/ProjectDialog.py:60 +msgstr "Soutien de la communauté" + +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Nom de l'entreprise" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Nom de l'entreprise (obligatoire) :" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "URL de l'entreprise (optionel) :" @@ -998,7 +999,7 @@ msgid "Comparison" msgstr "Comparaison" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "Compilation du program en IEC vers du code C en cours...\n" @@ -1006,93 +1007,93 @@ msgid "Concatenation" msgstr "Concaténation" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Configuration" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Variables de configuration" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Configuration" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Configurations" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Confirmer ou changer de nom de variable" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Connecter" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Connecter à l'automate cible" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Connecté à l'URI : %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Connexion" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Propriétés de la connexion" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "La connection a été abandonnée !\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "La connection à \"%s\" a échouée !\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Connexion perdu\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "La connexion à l'adresse '%s' a échouée.\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Connecteur" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Connecteurs :" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Console" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Constante" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Contact" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Description du contenu (optionel) :" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Prolongement" @@ -1112,20 +1113,20 @@ msgid "Conversion to time-of-day" msgstr "Conversion en heure de la journée" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Copier" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "Copier ce POU" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Copier un fichier du dossier de gauche vers celui de droite" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Copier un fichier du dossier de droite vers celui de gauche" @@ -1133,7 +1134,7 @@ msgid "Cosine" msgstr "Cosinus" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1142,12 +1143,12 @@ "Impossible d'ajouter l'enfant \"{a1}\", de type {a2}:\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Impossible d'importer l'ancien fichier %s" -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1156,7 +1157,7 @@ "Impossible de charger les parametres de base confnode {a1}:\n" "{a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1165,111 +1166,107 @@ "Impossible de charger les parametres confnode {a1}:\n" "{a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Impossible de coller autre chose qu'un POU." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "Impossible de démarrer l'automate !\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "Impossible d'arrêter l'automate !\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Impossible d'arrêter le débogage de l'automate !\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "Créer une IHM" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Créer un nouveau POU" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Créer une nouvelle action" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Créer un nouveau bloc d'actions" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Créer un nouveau bloc" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Créer une nouvelle branche" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Créer un nouveau relai" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Créer un nouveau copmmentaire" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Créer une nouvelle connexion" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Créer un nouveau contact" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Créer une nouvelle divergence" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Créer une nouvelle divergence ou convergence" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Créer une nouvelle étape initiale" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Créer un nouveau renvoi" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Créer une nouvelle barre d'alimentation" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Créer un nouvel échelon" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Créer une nouvelle étape" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Créer une nouvelle transition" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Créer une nouvelle variable" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Credits" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Répertoire de travail actuel :" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Couper" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Périodique" @@ -1281,19 +1278,19 @@ msgid "DEPRECATED" msgstr "OBSOLETE" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "Profil DS-301" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "Profil DS-302" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Type de donnée" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Types de données" @@ -1314,68 +1311,60 @@ msgid "Date subtraction" msgstr "Soustraction de date" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Jours :" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Les informations de débogage ne correspond pas l'automate connecté - " "Arrêter/transférez/démarrer pour pouvoir débogguer.\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Déboguer l'instance" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Débogage : %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Débogage : Variable '%s' inconnue\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Débogage : Type non supporté dans le débogage '%'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Déboggueur" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Débogueur désactivé\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Débogueur \n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Débogueur désactivé\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Supprimer" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Supprimer une branche de divergence" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "Supprimer un fichier" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Supprimer un segment de fil" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Supprimer un élément" @@ -1383,47 +1372,47 @@ msgid "Deletion (within)" msgstr "Suppression (au milieu)" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "Type de dérivation :" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" -msgstr "" - -#: ../controls/VariablePanel.py:432 +msgstr "Description" + +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Description :" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Dimensions :" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Direction" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Direction :" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Direct" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Déconnecter" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Déconnecter l'automate" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Déconnecté" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Divergence" @@ -1431,120 +1420,120 @@ msgid "Division" msgstr "Division" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Êtes-vous sûr de vouloir supprimer le fichier '%s' ?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Documentation" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Terminé" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Durée" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "Fichiers EDS (*.eds)|*.eds|Tous les fichiers|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Editer le block" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Editer les valeurs du relai" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Editer les valeurs du contact" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Editer une durée" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Editer l'étape" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "Editer une IHM WxWidgets à l'aide de WXGlade" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Editer les propriétés du block d'actions" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Editer les propriétés d'un type de données tableau" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Editer le commentaire" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Editer un fichier" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Editer l'élément" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Editer la cible du renvoi" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "Editer le code IEC ajouté au code généré par PLCGenerator" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Editer le nom de l'étape" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Editer la transition" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Barre d'outils d'édition" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Selection d'un éditeur" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Eléments :" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Vide" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Activer Défaire/Refaire" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Dimension ne peut être vide." + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Saisissez un nom" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Saisissez un numéro de port" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Saisissez l'adresse IP de l'interface à lier" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Enumération" @@ -1552,37 +1541,36 @@ msgid "Equal to" msgstr "Egal à" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Erreur" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" @@ -1590,12 +1578,12 @@ "Erreur : Au moins une configuration ou une ressource doit être déclarée dans" " l'automate !\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Erreur : Le compilateur d'IEC en C a retourné %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1604,37 +1592,46 @@ "Erreur dans le générateur de code ST/IL/SFC :\n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "Erreur lors de l'enregistrement de \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "Erreur : L'export de l'esclave a échoué\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" +"Erreur: Les serveurs Modbus/IP %{a1}.x et %{a2}.x utilisent le même numéro " +"de port {a3}.\n" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "Erreur : Aucun maître généré\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "Erreur : Aucun automate compilé\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "Une exception est apparu au cours de la connexion %s !\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "Contrôle d'exécution :" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Ordre d'exécution :" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "IHM expérimentale utilisant les technologies web" @@ -1646,77 +1643,77 @@ msgid "Exponentiation" msgstr "Exponentiel" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "Exporter un esclave CANopen sous la forme d'un fichier EDS" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "Exporter les valeurs du graphique vers le presse-papier" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "Exporter un esclave" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "Expression :" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "Externe" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "Extraction des variables adressées en cours...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "Echec : Le projet doit être compilé avant d'être transféré.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "Front descendant" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "Erreur fatale : impossible de trouver un compilateur.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "Recherche %s" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "Le champ %s n'a pas une valeur valide !" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "Les champs %s n'ont pas une valeur valide !" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "Le fichier '%s' existe déjà !" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "Rechercher" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "Recherche suivante" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "Recherche précédente" @@ -1724,94 +1721,90 @@ msgid "Find position" msgstr "Trouver la position" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "Rechercher :" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "Redémarrage du runtime forcé\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "Forcer la valeur" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "Forcer la valeur de la variable" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "Le formulaire est incomplet. %s doit être complété !" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "Le formulaire est incomplet. Le nom doit être complété !" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" "Le formulaire est incomplet. Un type de bloc valide doit être sélectionné !" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "Vers le bas" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "Fonction" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "&Bloc Fonctionnel" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "Bloc fonctionnel" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "Types de blocs fonctionnels" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "Blocs fonctionnels" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "Les blocs fonctionnels ne peuvent être utilisés dans des functions !" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "Le bloc fonctionnel \"%s\" ne peuvent être collés dans une function !" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "Fonctions" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "Générer le program" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "Création du code ST/IL/SFC de l'automate IEC-61131 en cours...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "Globale" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "Aller à la valeur actuelle" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "Graphiques" @@ -1823,110 +1816,116 @@ msgid "Greater than or equal to" msgstr "Supérieur ou égal à" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "Résolution de la grille :" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "Port d'interface HTTP:" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "Hauteur :" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "Répertoire utilisateur :" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "Horizontal :" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "Heures :" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "IL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "l'IP est invalide !" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "Importer un SVG" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "Entrée-Sortie" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" +"La variable InOut {a1} dans le bloc {a2} dans le POU {a3} doit être " +"connectée." + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "Inactif" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "Type de données incompatible entre \"{a1}\" et \"{a2}\"" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "Taille de donnée incompatible entre \"%s\" et \"BOOL\"" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "Taille de données incompatible entre \"{a1}\" et \"{a2}\"" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Indicateur" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" -msgstr "" - -#: ../editors/Viewer.py:611 +msgstr "Initiale" + +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "Étape initiale" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "Valeur initiale" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "Valeur initiale :" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "Inline" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "Entrée" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "Entrées :" @@ -1934,64 +1933,72 @@ msgid "Insertion (into)" msgstr "Insertion (au milieu)" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "L'instance dont l'id est %d n'existe pas !" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "Instances :" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "Interface" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "Interruption" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "Interval" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" +"URL invalide!\n" +"Veuillez entrer une adresse URL correcte" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "Les éléments plcopen ne sont pas valides !!! " -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Type invalide \"{a1}\"-> {a2} != {a3} pour \"{a4}\"" -#: ../canfestival/config_utils.py:645 +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Type invalide \"{a1}\"-> {a2} != {a3} pour \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "Chemin de variable à déboguer \"%s\" invalide" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "Valeur \"%s\" invalide pour un élément de la grille de variables" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "Valeur \"%s\" invalide pour un élément graphique" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "Valeur invalide \"{a1}\" pour la variable \"{a2}\"" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1999,51 +2006,55 @@ "Valeur invalide !\n" "Vous devez rentrer une valeur numérique." -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Renvoi" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "L'élément de LD dont l'id est %d apparait dans plusieurs échelons. " -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Langue" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Langue (optionnel) :" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Langue :" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "La dernière compilation correspond à la cible actuelle...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "Lancer un inspecteur d'IHM WX" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Lancer une console Python" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Gauche" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Barre d'alimentation à gauche" @@ -2059,11 +2070,11 @@ msgid "Less than or equal to" msgstr "Inférieur ou égal à" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Librairie" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Licence" @@ -2071,27 +2082,27 @@ msgid "Limitation" msgstr "Limitation" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "Linkage :\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Locale" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Entrées locales" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "Echec de la sélection d'un service!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "Adresse" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "Adresses disponibles :" @@ -2099,12 +2110,12 @@ msgid "Logarithm to base 10" msgstr "Logarithme de base 10" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "Echec de la résolution MDNS pour '%s'\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Variable mappable" @@ -2112,11 +2123,15 @@ msgid "Map located variables over CANopen" msgstr "Mappe des variables localisées sur un bus CANopen" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Maître" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" @@ -2126,29 +2141,29 @@ msgid "Maximum" msgstr "Maximum" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Maximum :" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Mémoire" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "Barre d'outils du menu principal" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Microsecondes :" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Milieu" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Millisecondes :" @@ -2156,23 +2171,27 @@ msgid "Minimum" msgstr "Minimum" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Minimum :" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Minutes :" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Divers" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Modificateur :" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " @@ -2181,55 +2200,55 @@ "Plus d'un connecteur correspondant à \"{a1}\" trouvé dans la continuité de " "\"{a2}\" POU" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Déplacer une action vers le bas" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Déplacer une action vers le haut" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Déplacer vers le haut" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Déplcer un élément vers le bas" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Déplacer un élément vers le haut" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Déplacer une instance vers le bas" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Déplacer une instance vers le haut" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Déplcer une tâche vers le bas" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Déplacer une tâche vers le haut" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Déplacer la vue" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Déplacer vers le bas" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Déplacer une variable vers le bas" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Déplacer une variable vers le haut" @@ -2241,26 +2260,26 @@ msgid "Multiplication" msgstr "Multiplication" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Poste de travail :" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NOM" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Nom" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Le nom ne doit pas être vide !" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Nom :" @@ -2268,46 +2287,46 @@ msgid "Natural logarithm" msgstr "Logarithme népérien" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Inversé" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " msgstr "Service Web Nevow échoué." -#: ../Beremiz_service.py:556 +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" msgstr "Import Nevow/Athena échoué:" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Nouveau" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Nouvel élément" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "Pas de modificateur" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "Aucun automate à transférer (la compilation a-t-elle réussi ?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "Pas de code défini dans le POU \"%s\"" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "Pas de connecteur correspondant à \"{a1}\" dans la continuité de \"{a2}\" POU" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2315,12 +2334,12 @@ "Pas de documentation.\n" "Bientôt disponible." -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "Aucune information trouvée pour le block \"%s\"" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " @@ -2329,49 +2348,49 @@ "Pas de variable de sortie {a1} trouvée dans le bloc {a2} dans POU {a3}. La " "connection doit-être cassée" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "Pas de résultat de recherche disponible." -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "Fichier SVG inconnu : %s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "Pas de tel index/sous-index ({a1},{a2}) (variable {a3})" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" "Pas de tel index/sous-index ({a1},{a2}) avec l'ID : {a3} (variable {a4})" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "Aucune valeur valide sélectionnée !" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "Pas de varaibles définies dans le POU \"%s\"" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "Node ID inexistant : {a1} (variable {a2})" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "Non-Persistante" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Normal" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "Variable non mappable PDO : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" @@ -2380,7 +2399,7 @@ msgid "Not equal to" msgstr "Non égal à" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Nombre de branches :" @@ -2388,24 +2407,24 @@ msgid "Numerical" msgstr "Numérique" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:84 +msgstr "OnChange" + +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Uniquement les éléments" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Ouvrir" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "Ouverture de Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." @@ -2413,67 +2432,67 @@ "Cadriciel Open Source pour l'automatisme, IDE implémenté en IEC 61131 avec " "un lot d'extensions constament croissant et un executable PLC flexible." -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "Ouvrir un explorateur de fichier pour gérer les fichiers de projet" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "Ouverture de wxGlade" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Option" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Options" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Groupe (optionnel) :" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Autre profil" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Sortie" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO reçu" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO transmis" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "Automate :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "Log de l'automate" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "Génération du code PLC échouée !\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "Le PLC est vide ou déjà lancé." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "PLC non démarré" -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2482,15 +2501,15 @@ "Erreur de syntaxe PLC à la ligne {a1}:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "Fichiers PLCOpen (*.xml)|*.xml|Tous les fichiers|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2500,205 +2519,205 @@ "\n" "Beremiz est un " -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "PORT" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "Nom du POU" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "Nom du POU :" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "Type du POU" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "Type du POU :" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "Connexion de PYRO à l'URI:%s\n" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO utilise les certificats dans '%s'\n" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Mise en page..." -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Taille de la page (optionnel) :" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Page: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Instance parent" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Coller" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "Coller un POU" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Modèle à rechercher :" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Nombre de pattes :" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Choisissez une cible" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "Entrer un nom de bloc s'il vous plaît" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "Saisissez le texte du commentaire" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "Saisissez le nom de l'étape" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "Saisissez le texte" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "Veuillez entrer la valeur pour une variable de type \"%s\" :" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "Le numéro de port doit être compris entre 0 et 65535 !" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "Le numéro de port doit être un entier !" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "Barre d'alimentation" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "Propriétés de la barre d'alimentation" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "Aperçu avant impression" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "Aperçu :" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Imprimer" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "Aperçu avant impression" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Priorité" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Priorité :" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "Problème au démarrage du PLC : erreur %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Nom de produit" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Nom du produit (obligatoire) :" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "Publication du produit (optionnel) :" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "Version du produit" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "Version du produit (obligatoire) :" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Programme" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "Le programme a été généré avec succès !" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Programmes" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "Les programmes ne peuvent être utilisés par les autres POUs !" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Projet" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "Projet '%s' :" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "Fichiers de projet" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "Nom du projet" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "Nom du projet (obligatoire) :" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "Version du projet (optionnel) :" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2706,90 +2725,92 @@ "Erreur de syntaxe dans le fichier du projet :\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "Propriétés du projet" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "" - -#: ../dialogs/ConnectionDialog.py:98 +"La disposition de l'arborescence du projet ne correspond pas à confnode.xml " +"{a1}!={a2} " + +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "Propager le nom" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "Propriétés" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" -msgstr "" - -#: ../connectors/PYRO/__init__.py:118 +msgstr "Publication du service sur le réseau local" + +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" -msgstr "" - -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +msgstr "Exception Pyro: %s\n" + +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "Pyro port :" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Code Python" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Fichier Python" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "Qualificatif" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "Quitter" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "Echelle :" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "Ajout code IEC" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "Êtes-vous sûr de vouloir supprimer le noeud '%s' ?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "Refaire" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "Référence" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "Actualiser" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Expression régulière" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "Expressions régulières" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "Relacher la valeur" @@ -2797,56 +2818,56 @@ msgid "Remainder (modulo)" msgstr "Modulo" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "Enlever un noeud %s" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "Supprimer le Datatype" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "Supprimer le Pou" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "Supprimer une action" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "Supprimer un élément" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "Supprimer un fichier du dossier de gauche" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "Supprimer une instance" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Enlever l'esclave" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "Supprimer la tâche" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "Supprimer une variable" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "Renommer" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "Remplacer un fichier" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "Remplacer le fil par les connexions" @@ -2854,43 +2875,43 @@ msgid "Replacement (within)" msgstr "Remplacement (au milieu)" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "Mise à zéro" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "Réinitialiser l'order d'exécution" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "Réinitialiser l'interface" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "Réinitialiser le résultat de la recherche" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Ressources" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "Persistante" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "Type de retour :" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "Droite" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "Barre d'alimentation à droite" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "Front montant" @@ -2906,138 +2927,141 @@ msgid "Rounding up/down" msgstr "Arrondi" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "Exécuter" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" - -#: ../ProjectController.py:1108 +"La génération du code C pour les extensions d'entrées-sorties a échoué!\n" + +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +msgstr "La génération du code C pour les extensions de librairie a échoué!\n" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "Client SDO" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "Serveur SDO" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" - -#: ../PLCGenerator.py:773 +"Le saut SFC dans le POU \"{a1}\" fait référence à l'étape SFC inexistante " +"\"{a2}\"" + +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +msgstr "La transition SFC dans le POU \"%s\" doit être connectée." + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "Fichiers ST (*.st)|*.st|Tous les fichiers|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "Fichiers SVG (*.svg)|*.svg|Tous les fichiers|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Enregistrer" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Enregistrer sous..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Enregistrer sous..." -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:69 +msgstr "Le chemin d'enregistrement est le même que le chemin du projet!\n" + +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Contexte" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Rechercher" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Rechercher dans le projet" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Secondes :" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Tout sélectionner" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Sélectionner une direction pour la variable :" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Sélectionner un éditeur :" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Sélectionnez une instance" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Sélectionner un objet" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" -msgstr "" +msgstr "Le répertoire sélectionné contient déjà un autre projet. Écraser?\n" #: ../plcopen/iec_std.csv:70 msgid "Selection" msgstr "Sélection" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "Convergence simple" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "Divergence simple" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Recherche de service" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Services disponibles:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Mise à 1" @@ -3049,27 +3073,27 @@ msgid "Shift right" msgstr "Décalage à droite" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "Afficher le code IEC généré par PLCGenerator" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Afficher le maître" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Afficher le maître généré par config_utils" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Afficher le code" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "Convergence double" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "Divergence double" @@ -3077,79 +3101,77 @@ msgid "Sine" msgstr "Sinus" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Evènement" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" -msgstr "" - -#: ../PLCGenerator.py:397 +msgstr "La source n'a pas changé, pas de compilation.\n" + +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " "'{a2}.{a3}'." msgstr "" +"Le signal source doit être défini pour la tâche évènement '{a1}' dans la " +"ressource '{a2}. {A3}'." #: ../plcopen/iec_std.csv:23 msgid "Square root (base 2)" msgstr "Racine carré (base 2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "Blocs fonctionnels standards" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "Démarrer l'automate" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Début de la compilation dans %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Démarré" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "Démarrer l'automate\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Barre d'outils de statut" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Étape" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Arrêter" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "Arrêter l'automate" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Arrêter l'automate en cours d'exécution" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Arrêté" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Arrêt du débogage en cours\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Structure" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Sous-ensemble" @@ -3157,20 +3179,20 @@ msgid "Subtraction" msgstr "Soustraction" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Compilé avec succès.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +msgstr "Changer de perspective" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "" "Erreur de syntaxe dans l'expression régulière du modèle à rechercher !" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "TYPE" @@ -3178,19 +3200,19 @@ msgid "Tangent" msgstr "Tangente" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Tâche" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Tâches :" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Temporaire" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3201,8 +3223,16 @@ "You can subscribe to the list here:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" - -#: ../editors/FileManagementPanel.py:180 +"Le meilleur endroit pour poser des questions sur Beremiz / PLCOpenEditor\n" +"est la liste de diffusion du projet: beremiz-devel@lists.sourceforge.net\n" +"\n" +"C'est le principal canal de soutien communautaire.\n" +"Pour poster, il est nécessaire d'être abonné à la liste de diffusion.\n" +"\n" +"Vous pouvez vous abonner à la liste ici:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" + +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3211,15 +3241,15 @@ "Le fichier '%s' existe déjà.\n" "Voulez-vous le remplacer ?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "Le groupe de blocs doit être cohérent !" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Le projet a été modifié. Voulez-vous l'enregistrer ?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " @@ -3228,7 +3258,7 @@ "Un POU a pour nom \"%s\". Cela peut générer des conflits. Voulez-vous " "continuer ?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3236,14 +3266,14 @@ "Un problème est apparu lors de l'impression.\n" "Peut-être que votre imprimante n'est pas correctement configurée ?" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Cette option n'a pas encore disponible" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" -msgstr "" +msgstr "Tick: %d" #: ../plcopen/iec_std.csv:40 msgid "Time" @@ -3278,36 +3308,36 @@ msgid "Time-of-day subtraction" msgstr "Soustraction d'horodatage" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" -msgstr "" - -#: ../editors/Viewer.py:548 +msgstr "Basculer la valeur" + +#: ../editors/Viewer.py:584 msgid "Top" msgstr "Haut" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Transférer" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "Transférer l'automate" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Transfert effectué avec succès.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Le transfert a échoué\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Transition" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " @@ -3316,58 +3346,62 @@ "Le code de la transition \"%s\" doit contenir une variable de sortie ou un " "relai dont la référence est son nom" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "Nom de la transition" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "Nom de la transition :" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" - -#: ../PLCGenerator.py:1598 +"La transition avec le contenu \"{a1}\" n'est pas connectée à une étape " +"suivante dans le POU \"{a2}\"" + +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" - -#: ../plcopen/plcopen.py:1323 +"La transition avec le contenu \"{a1}\" n'est pas connectée à une étape " +"précédente dans le POU \"{a2}\"" + +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "La transition nommée %s n'existe pas !" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "Transitions" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Traduit par" + +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "Activation" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "Twisted indisponible." + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Type" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "Type et ses dérivés" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "Conflit entre types pour l'adresse \"%s\"" @@ -3376,179 +3410,233 @@ msgid "Type conversion" msgstr "Conversion de type" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "Propriétés du type :" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "Type uniquement" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Type :" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "Impossible de définir le mappage des PDO pour le noeud %02x" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "Unable to get Xenomai's %s \n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:254 +msgstr "Type de bloc indéfini \"{a1}\" dans le module \"{a2}\"" + +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "Type de POU \"%s\" indéterminé !" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Défaire" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Inconnu" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Variable \"%s\" inconnue dans ce POU !" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "SansNom" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Sansnom%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Taille de donnée \"%s\" non identifié !" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Types de donnée du projet" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "Type utilisateur" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "POUs du projet" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Valeur" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Valeurs" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Variable" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:64 +msgstr "Dépôt de variable" + +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Propriétés de la variable" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Direction de la variable" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "La variable n'appartient pas à ce POU !" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Variable:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Variables" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Vertical :" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " -msgstr "" - -#: ../connectors/WAMP/__init__.py:91 +msgstr "Le démarrage du client WAMP a échoué." + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" -msgstr "" - -#: ../connectors/WAMP/__init__.py:131 +msgstr "WAMP se connectant à l'URL: %s\n" + +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" -msgstr "" - -#: ../connectors/WAMP/__init__.py:150 +msgstr "Délai de connexion WAMP dépassé" + +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" -msgstr "" - -#: ../Beremiz_service.py:564 +msgstr "La connexion WAMP à '%s' a échoué.\n" + +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:37 +msgstr "L'importation de WAMP a échoué:" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "IHM WXGlade" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Attention" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Mises en garde du generateur de code ST/IL/SFC :\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Tout le projet" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Longueur :" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "Boucler" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Écrit par" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "Interface WxGlade" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3556,7 +3644,7 @@ "Vous n'avez pas les permissions d'écriture.\n" "Ouvrir Inkscape tout de même ?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3564,7 +3652,7 @@ "Vous n'avez pas les permissions d'écriture.\n" "Ouvrir wxGlade tout de même ?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3572,7 +3660,7 @@ "Vous n'avez pas la permission de travailler sur le projet.\n" "Travailler sur une copie du projet ?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" @@ -3580,74 +3668,66 @@ "Vous devez sélectionné le bloc ou le group autour duquel un ebranche doit " "être ajoutée !" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "" "Vous devez sélectionner le fil sur lequel le contact doit être ajouté !" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "Vous devez saisir un nom !" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "Vous devez saisir une valeur !" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "Zoom" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "jours" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "erreur: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" -msgstr "" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "fichier :" - -#: ../dialogs/PouDialog.py:32 +msgstr "quitté avec le statut {a1} (pid {a2})\n" + +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "fonction" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "fonction :" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "Bloc fonctionnel" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "heures" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "ligne :" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "L'installation de matiec n'est pas trouvée\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 +msgstr "millisecondes" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "minutes" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "programme" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "secondes" @@ -3663,26 +3743,28 @@ msgid "string right of" msgstr "Caractères à droite de" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "Information de mise à jour non disponible." -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "attention: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." -msgstr "" - -#: ../ConfigTreeNode.py:56 +msgstr "{a1} \"{a2}\" ne peut pas être collé comme {a3}." + +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" +"Le fichier XML {a1} ne suit pas le schéma XSD à la ligne {a2}:\n" +"{a3}" #: Extra XSD strings msgid "CanFestivalSlaveNode" @@ -3716,10 +3798,10 @@ msgstr "Driver CAN" msgid "Generic" -msgstr "" +msgstr "Générique" msgid "Command" -msgstr "" +msgstr "Commande" msgid "Xenomai" msgstr "Xenomai" @@ -3745,6 +3827,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "Paramètres de base" @@ -3770,7 +3918,7 @@ msgstr "Disable_Extensions" msgid "%(codefile_name)s" -msgstr "" +msgstr "%(codefile_name)s" msgid "variables" msgstr "variables" @@ -3794,34 +3942,37 @@ msgstr "desc" msgid "onchange" -msgstr "" +msgstr "onchange" msgid "opts" -msgstr "" +msgstr "opts" #: Extra TC6 documentation strings msgid "0 - current time, 1 - load time from PDT" -msgstr "" +msgstr "0 - heure actuelle, 1 - utilise le temps donné dans PDT" msgid "Preset datetime" -msgstr "" +msgstr "Date et heure prédéfinies" msgid "Copy of IN" msgstr "Copie de IN" msgid "Datetime, current or relative to PDT" -msgstr "" +msgstr "Date et heure, actuel ou relatif à PDT" msgid "" "The real time clock has many uses including time stamping, setting dates and" " times of day in batch reports, in alarm messages and so on." msgstr "" +"L'horloge temps réel a de nombreuses utilisations, y compris l'horodatage, " +"définir les dates et heures dans les rapports de production, dans les " +"messages d'alarme, etc." msgid "1 = integrate, 0 = hold" -msgstr "" +msgstr "1 = intégrer, 0 = retenir" msgid "Overriding reset" -msgstr "" +msgstr "Réinitialisation" msgid "Input variable" msgstr "Variable d'entrée" @@ -3833,115 +3984,136 @@ msgstr "Période d'échantillonnage" msgid "NOT R1" -msgstr "" +msgstr "NOT R1" msgid "Integrated output" -msgstr "" +msgstr "Sortie intégrale" msgid "" "The integral function block integrates the value of input XIN over time." msgstr "" +"Le bloc fonction intégral intègre la valeur de l'entrée XIN dans le temps." msgid "0 = reset" msgstr "0 = reset" msgid "Input to be differentiated" -msgstr "" +msgstr "Entrée à dériver" msgid "Differentiated output" -msgstr "" +msgstr "Sortie dérivée" msgid "" "The derivative function block produces an output XOUT proportional to the " "rate of change of the input XIN." msgstr "" +"Le bloc fonction dérivé produit une sortie XOUT proportionnelle à la " +"variation dans le temps de l'entrée XIN." msgid "0 - manual , 1 - automatic" -msgstr "" +msgstr "0 - manuel, 1 - automatique" msgid "Process variable" -msgstr "" +msgstr "Variable de processus" msgid "Set point" -msgstr "" +msgstr "Point de consigne" msgid "Manual output adjustment - Typically from transfer station" msgstr "" +"Réglage manuel de la sortie - Généralement à partir de la station de " +"transfert" msgid "Proportionality constant" -msgstr "" +msgstr "Constante de proportionnalité" msgid "Reset time" msgstr "Temps de reset" msgid "Derivative time constant" -msgstr "" +msgstr "Constante de temps dérivée" msgid "PV - SP" -msgstr "" +msgstr "PV - SP" msgid "FB for integral term" -msgstr "" +msgstr "FB pour terme intégral" msgid "FB for derivative term" -msgstr "" +msgstr "FB pour terme dérivé" msgid "" "The PID (proportional, Integral, Derivative) function block provides the " "classical three term controller for closed loop control." msgstr "" +"Le bloc fonctionnel PID (Proportionnel, Intégral, Dérivé) fournit le " +"contrôleur classique à trois termes pour le contrôle en boucle fermée." msgid "0 - track X0, 1 - ramp to/track X1" -msgstr "" +msgstr "0 - suivre X0, 1 - rampe vers/suivre X1" msgid "Ramp duration" -msgstr "" +msgstr "Durée de la rampe" msgid "BUSY = 1 during ramping period" -msgstr "" +msgstr "BUSY = 1 durant la rampe" msgid "Elapsed time of ramp" -msgstr "" +msgstr "Temps écoulé de la rampe" msgid "The RAMP function block is modelled on example given in the standard." -msgstr "" +msgstr "Le bloc fonction RAMP est basée sur l'exemple donné dans la norme." msgid "" "The hysteresis function block provides a hysteresis boolean output driven by" " the difference of two floating point (REAL) inputs XIN1 and XIN2." msgstr "" +"Le bloc fonction hystérésis fournit une sortie booléenne à hystérésis " +"pilotée par la différence de deux entrées à virgule flottante (REAL) XIN1 et" +" XIN2." msgid "The SR bistable is a latch where the Set dominates." -msgstr "" +msgstr "La bistable SR est une bascule où l'état Set est dominant." msgid "The RS bistable is a latch where the Reset dominates." -msgstr "" +msgstr "La bistable RS est une bascule où l'état Reset est dominant." msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." -msgstr "" +"exclusive access to certain resources." +msgstr "" +"Le sémaphore fournit un mécanisme permettant aux éléments logiciels " +"d'accéder mutuellement à certaines ressources." msgid "The output produces a single pulse when a rising edge is detected." msgstr "" +"La sortie produit une impulsion unique lorsqu'un front montant est détecté." msgid "The output produces a single pulse when a falling edge is detected." msgstr "" +"La sortie produit une impulsion unique lorsqu'un front descendant est " +"détecté." msgid "" "The up-counter can be used to signal when a count has reached a maximum " "value." msgstr "" +"Le compteur peut être utilisé pour signaler qu'un compte a atteint une " +"valeur maximale." msgid "" "The down-counter can be used to signal when a count has reached zero, on " "counting down from a preset value." msgstr "" +"Le décompteur peut être utilisé pour signaler qu'un compte a atteint zéro, " +"lors du décompte d'une valeur prédéfinie." msgid "" "The up-down counter has two inputs CU and CD. It can be used to both count " "up on one input and down on the other." msgstr "" +"Le compteur-décompteur a deux entrées CU et CD. Il peut être utilisé pour " +"compter à la fois sur une entrée et sur l'autre sur l'autre." msgid "first input parameter" msgstr "Premier paramètre d'entrée" @@ -3956,19 +4128,25 @@ msgstr "Second paramètre de sortie" msgid "internal state: 0-reset, 1-counting, 2-set" -msgstr "" +msgstr "état interne: 0-reset, 1-counting, 2-set" msgid "" "The pulse timer can be used to generate output pulses of a given time " "duration." msgstr "" +"La temporisation d'impulsions peut être utilisée pour générer des impulsions" +" de sortie d'une durée donnée." msgid "" "The on-delay timer can be used to delay setting an output true, for fixed " "period after an input becomes true." msgstr "" +"La temporisation à retard peut être utilisée pour retarder un front montant " +"d'une durée donnée." msgid "" "The off-delay timer can be used to delay setting an output false, for fixed " "period after input goes false." msgstr "" +"La temporisation de retard peut être utilisée pour retarder un front " +"descendant d'une durée donnée." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_hr.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_hr.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4017 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language-Team: Croatian (https://www.transifex.com/beremiz/teams/75746/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "" + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "" + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "" + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr "" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "" + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "" + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "" + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "" + +#: ../features.py:33 +msgid "C extension" +msgstr "" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "" + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "" + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "" + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "" + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "" + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "" + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" + +msgid "first input parameter" +msgstr "" + +msgid "second input parameter" +msgstr "" + +msgid "first output parameter" +msgstr "" + +msgid "second output parameter" +msgstr "" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_hu_HU.po --- a/i18n/Beremiz_hu_HU.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_hu_HU.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Gábor Véninger , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Gábor Véninger , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Krisztián Veress , 2018\n" "Language-Team: Hungarian (Hungary) (https://www.transifex.com/beremiz/teams/75746/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +18,7 @@ "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -44,153 +43,158 @@ "\n" "Nyomonkövetés:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr "Külső" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "Be/Ki" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "Bemenet" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr "Helyi" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "Kimenet" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "Ideiglenes" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr " és %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "létrehozás hibás !\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "\"%s\" Adat típus nem létezik !!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "\"%s\" POU már létezik !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "\"%s\" POU nem létezik !!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" sajátmaga nem használható!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" konfiguráció már létezik!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "\"%s\" konfiguráció már létezik !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "\"%s\" adat típus már létezik!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "A(z) \"%s\" elem ehhez a POU-hoz már létezik!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "A(z) \"%s\" könyvtár egy nem érvényes Beremiz projekt\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "A(z) \"%s\" egy kulcsszó. Nem használható!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "A(z) \"%s\" egy nem érvényes érték!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "A(z) \"%s\" egy nem érvényes könyvtár!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "A(z) \"%s\" egy nem érvényes azonosító!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "" "A(z) \"%s\" már használatban van egy vagy több POU-ban. Biztos folytatni " "akarja?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\" POU már létezik!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "\"%s\" lépés már létezik!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" érték már definiálva van!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" érték nem valós tömb dimenzió!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -199,209 +203,205 @@ "\"%s\" érték nem valós tömb dimenzió!\n" "A jobb oldali érték nagyobb kell legyen mint a bal oldali." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dd" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%ds" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s Adat Típusok" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POU-k" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s Profil" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "%s testnek nincsenek példányai!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%s testben nincs szöveg!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Elem Hozzáadása" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Bezárás" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Konfiguráció" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Adat Típus" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Törlés" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Nézet" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Szerkesztés" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Fájl" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Funkció" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Segítség" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Licensz" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Program" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Tulajdonságok" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&Legutóbbi Projektek" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Erőforrás" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} egyezés a projektben" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} egyezések a projektben" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d találat)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1n" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1ó" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1p" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1mp" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " "to continue?" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "A \"%s\" nevű POU már létezik!" @@ -411,26 +411,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Egy helyet ki kell választani!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Egy feladat ezzel a névvel már létezik!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Egy változó a \"%s\" névvel már létezik ebben a POU-ban!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Egy változó a \"%s\" névvel már létezik!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "Névjegy" @@ -438,127 +438,127 @@ msgid "Absolute number" msgstr "Abszolut érték" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Művelet" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Művelet Blokk" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Művelet Név" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Művelet Név:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "Művelet név %s nem létezik!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Műveletek" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Műveletek:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Aktív" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Hozzáadás" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Művelet hozzáadás" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "" "A beazonosított változók szinkronizált eléréséhez tartózó C forráskód " "hozzáadása" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Konfiguráció Hozzáadás" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Adattípus Hozzáadás" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Elágazás Hozzáadás" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "IP Hozzáadás" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "POU Hozzáadás" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Aszinkron futású Python kód Hozzáadás" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Erőforrás hozzáadás" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Átváltás Hozzáadás" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Vezeték Szakasz Hozzáadás" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Új Kezdeti Lépés Hozzáadás" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Új elugrás hozzáadás" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Új lépés hozzáadás" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Egyszerű WxGlade alapú GUI hozzáadás" -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Művelet hozzáadás" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Elem hozzáadás" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Új példány hozzáadás" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Szolga hozzáadás" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Feladat hozzáadás" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Változó hozzáadás" @@ -566,44 +566,44 @@ msgid "Addition" msgstr "Összeadás" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "További funkció blokkok" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Blokk méret beállítás" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Elrendezés" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Minden" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Minden fájl (*.*)|*.*|CSV files (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Már csatalakoztatva van. Kérem szétcsatlakoztatni.\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Ez az elem név már létezik ebben a struktúrában: \"%s\"" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Ilyen nevű példány már létezik!" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "A névváltoztatás elfogadása az összes ilyen névre." @@ -623,8 +623,8 @@ msgid "Arithmetic" msgstr "Aritmetika" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Tömb" @@ -632,45 +632,37 @@ msgid "Assignment" msgstr "Hozzárendelés" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Legalább egy változót vagy kifejezést ki kell választani!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Szerző" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Szerző Neve (opcionális):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Viszafele" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Alaptípus:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Alaptípusok" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -702,85 +694,85 @@ msgid "Bitwise inverting" msgstr "Bitenkénti invertálás" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Blokk" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Blokk Tulajdonságok" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Blokk neve" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Alja" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" -msgstr "" - -#: ../ProjectController.py:1155 +msgstr "C kód" + +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" -msgstr "" - -#: ../targets/toolchain_makefile.py:122 +msgstr "C kód sikeresen elkészűlt. \n" + +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" -msgstr "" - -#: ../targets/toolchain_gcc.py:192 +msgstr "C kód készítése sikertelen.\n" + +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" -msgstr "" - -#: ../features.py:32 +msgstr "C fordítás a %s aikertelen.\n" + +#: ../features.py:33 msgid "C extension" -msgstr "" - -#: ../dialogs/AboutDialog.py:71 +msgstr "C kiterjesztés" + +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" -msgstr "" - -#: ../canfestival/NetworkEditor.py:52 +msgstr "K$reditek" + +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "CANOpen hálózat" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "CANOpen szolga" @@ -788,34 +780,34 @@ msgid "CANopen support" msgstr "CANOpen támogatás" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "" @@ -825,46 +817,50 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "Közép" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "IP cím megváltoztatása a hozzákötött interfészen" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Név megváltoztatása" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "POU típus megváltoztatása" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "Port szám megváltoztatása" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "Munkakönyvtár megváltoztatása" @@ -872,115 +868,119 @@ msgid "Character string" msgstr "Karakter sztring" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Válasszon SVG fájlt" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Válasszon mappát a projekt mentéshez" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Válasszon fájlt" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Válasszon projektet" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Válasszon értéket a %s-nek:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Válasszon munkakönyvtárat" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "A kiválasztott mappa nem tartalmaz érvényes projektet!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "A kiválasztott mappa nem üres. Nem használható új projekthez." -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Osztály" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Osztály szűrő:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Osztály:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Takarítás" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Log üzenetek kitakarítása" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Project fordítás mappa takarítása" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Fordítási mappa kitakarítása\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Hibák törlése" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Végrehajtási Sorrend Törlése" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Bezárás" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Alkalmazás Bezárás" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Projekt Bezárás" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Fül Bezárás" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Tekercs" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Megjegyzés" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Közösségi támogatás" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Vállalat Neve" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Vállalat Neve (kötelező):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "Vállalat Weboldal (opcionális):" @@ -988,7 +988,7 @@ msgid "Comparison" msgstr "Összehasonlítás" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "IEC Program fordítása C kódra...\n" @@ -996,93 +996,93 @@ msgid "Concatenation" msgstr "Összefűzés" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Konfiguráció" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Változók konfigurálása" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Konfiguráció" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Konfigurációk" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Erősítse meg vagy változtassa meg a változó nevét" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Kapcsolódás" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Kapcsolódás a cél PLC-hez" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Az URI: %s csatlakoztatva" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Kapcsolat" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Kapcsolat Tulajdonságok" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "Kapcsolódás megszakítva!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "Kapcsolódás a %s-hez nem sikerült!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Kapcsolat elvesztve!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Kapcsolódás a '%s'-hez nem sikerült.\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Csatlakozó" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Csatlakozók:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Konzol" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Konstans" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Kapcsolat" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Tartalom leírása (opcionális)" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Folytatás" @@ -1102,20 +1102,20 @@ msgid "Conversion to time-of-day" msgstr "Konvertálás napszakká (TOD)" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Másolás" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "POU másolás" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Másolás bal oldali mappából jobbra" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Másolás jobb oldali mappából balra" @@ -1123,137 +1123,133 @@ msgid "Cosine" msgstr "Koszinusz" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" "{a3}\n" msgstr "" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Régi %s fájlt nem lehet beimportálni." -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" " {a2}" msgstr "" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" " {a2}" msgstr "" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Nem POU típusú objektum beillesztése nem lehetséges." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "PLC nem indult el!\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "PLC nem állt le!\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Hibakereső nem áll le.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "HMI létrehozása" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Új Program Szervezési Egység (POU) létrehozása" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Új művelet létrehozása" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Új művelek blokk létrehozása" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Új blokk létrehozása" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Új ág létrehozása" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Új tekercs létrehozása" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Új megjegyzés létrehozása" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Új kapcsolat léterhozása" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Új kötés létrehozása" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Új leágazás létrehozása" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Új leágazás vagy összefutás léterhozása" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Új kezdeti lépés létrehozása" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Új ugrás létrehozása" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Új áramsin létrehozása" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Új rung létrehozása" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Új lépés létrehozása" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Új átmenet létrehozása" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Új változó létrehozása" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Köszönet" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Aktuális munka könyvtár:" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Kivágás" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Ciklikus" @@ -1265,19 +1261,19 @@ msgid "DEPRECATED" msgstr "ELAVULT" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "DS-301 Profil" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "DS-302 Profil" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Adattípus" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Adattípusok" @@ -1298,68 +1294,60 @@ msgid "Date subtraction" msgstr "Dátum kivonás" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Napok:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Hibakeresés nem egyezik a PLC-vel - megállítás / letöltés / újraindítás " "szükséges, hogy engedélyezve legyen.\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Példány hibakeresése" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Hibakeresés: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Hibakeresés: Ismeretlen változó '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Hibakeresés: Nem támogatott típus '%s'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Hibakereső" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Hibakereső letiltva\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Hibakereső kész\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Hibakereső megállt.\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Törlés" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Elágazás törlése" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "File törlése" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Vezeték szakasz törlése" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Elem törlése" @@ -1367,47 +1355,47 @@ msgid "Deletion (within)" msgstr "Törlés (ebben)" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "Leírás" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Leírás:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Méretek:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Irány" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Irány:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Közvetlenül" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Szétkapcsolás" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Szétkapcsolás PLC-ről" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Szétkapcsolva" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Elágazás" @@ -1415,120 +1403,120 @@ msgid "Division" msgstr "Osztás" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Biztos, hogy törölni akarja a '%s' fájlt?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Dokumentáció" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Kész" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Időtartam" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS fájlok (*.eds)|*.eds|Minden fájl|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Blokk Szerkesztése" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Tekercs Értékének Szerkesztése" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Kötés Értékének Szerkesztése" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Időtartam Szerkesztése" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Lépés Szerkesztése" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "WxWidgets GUI szerkesztése WXGlade segítségével" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Művelet blokk tulajdonságok szerkesztése" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Tömb tulajdonságok szerkesztése" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Megjegyzés szerkesztése" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Fájl szerkesztése" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Elem szerkesztése" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Elugrás céljának szerkesztése" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "PLCGenerator által létrehozott nyers IEC kód szerkesztése" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Lépés név szerkesztése" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Váltás szerkesztése" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Szerkesztő Eszköztár" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Szerkesztő kiválasztás" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Elemek :" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Üres" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Vissza/Újra Engedélyezés" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Adjon meg egy nevet" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Adjon meg egy port számot" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Adja az kötéshez használt interfész IP címét" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Felsorolva" @@ -1536,37 +1524,36 @@ msgid "Equal to" msgstr "Egyenlő" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Hiba" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" @@ -1574,12 +1561,12 @@ "Hiba: Legalább egy konfiguráció és egy erőforrást deklarálni kell a PLC-" "ben!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Hiba: IEC-ről C-re fordítás hiba %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1588,37 +1575,44 @@ "Hiba az ST/IL/SFC kód generátorban:\n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "Hiba a \"%s\" mentése közben\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "Hiba: Szolga exportálás nem sikerült\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "Hiba: Nincs Master létrehozva\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "Hiba: Nincs lefordított PLC\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "Végrehajtás vezérlés:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Végrehajtási Sorrend:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "Kísérleti web alapú HMI" @@ -1630,77 +1624,77 @@ msgid "Exponentiation" msgstr "Hatvány" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "CanOpen slave exportálása EDS fájlba" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "Grafikus értékek vágólapra másolása" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "Szolga exportálása" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "Kifejezés:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "Külső" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "A megtalált változók kinyerése...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "Sikertelen: Le kell fordítani az átküldés előtt.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "Lefutóél" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "Hiba: fordító nem található.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "%s Letöltése" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "Keresés" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "Következő keresése" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "Előző keresése" @@ -1708,93 +1702,89 @@ msgid "Find position" msgstr "Pozíció keresése" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "Keresés:" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "Futásidejű program kényszerítet újratöltése\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "Kényszerített érték" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "Változó érték kényszerítése" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "Előre" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "Funkció" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "Funkcióblokk" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "Funkcióblokk" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "Funkcióblokk Típusok" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "Funkcióblokkok" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "Funkcióblokkok nem használhatók a függvényekben!" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "Funkcióblokk \"%s\" nem illeszthető be a függvénybe!!!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "Függvények" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "Program Létrehozás" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "SoftPLC IEC-61131 ST/IL/SFC kód létrehozása...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "Globális" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "Menj az aktuális értékhez" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "Grafika" @@ -1806,110 +1796,114 @@ msgid "Greater than or equal to" msgstr "Nagyobb vagy egyenlő" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "Rács Felbontás:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "HTTP interfész port:" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "Magasság:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "Saját Könyvtár:" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "Vízszintes:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "Órák:" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "IL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "IP cím nem valós!" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "SVG importálás" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "BeKi" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "Inaktív" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "\"{a1}\" és \"{a2}\" nem kompatibilis adattípusok." -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "\"%s\" és \"BOOL\" nem kompatibilis adatméretűek." -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "\"{a1}\" és \"{a2}\" nem kompatibilis méretűek" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Kijelző" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "Kezdeti" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "Kezdeti lépés" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "Kezdőérték" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "Kezdőérték:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "Inline" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "Bemenet" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "Bemenetek:" @@ -1917,116 +1911,126 @@ msgid "Insertion (into)" msgstr "Beszúrás (ide)" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "Az %d azonosító nem létezik!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "Példányok:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "Interfész" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "Megszakítás" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "Intervallum" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "Érvénytelen plcopen elem(ek)!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Ugrás" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "A %d azonosítójú létra elem több rung-ban van használva." -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Nyelv" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Nyelv (opcionális):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Nyelv:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" "A legutolsó fordítás már megegyezik az aktuális céllal. Mindenképpen " "átküldésre kerül...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "WX GUI elemző indítása" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Élő Python shell indítása" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Bal" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Bal ÁramSin" @@ -2042,11 +2046,11 @@ msgid "Less than or equal to" msgstr "Kisebb vagy egyenlő" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Könyvtár" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Licensz" @@ -2054,27 +2058,27 @@ msgid "Limitation" msgstr "Határolás" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "Összefűzés:\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Helyi" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Helyi bejegyzések" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "Helyi szolgáltatás felderítése nem sikerült!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "Hely" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "Elérhető helyek:" @@ -2082,12 +2086,12 @@ msgid "Logarithm to base 10" msgstr "10-es alapú logaritmus" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "MDNS feloldás nem sikerült a '%s'-ra\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Változó Hozzárendelés" @@ -2095,11 +2099,15 @@ msgid "Map located variables over CANopen" msgstr "CANopen buszon feldezett változók hozzárendelése" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Fő" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" @@ -2108,29 +2116,29 @@ msgid "Maximum" msgstr "Maximum" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Maximum:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Memória" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "Menü Eszköztár" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Mikroszekundum:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Középső" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Ezredmásodperc" @@ -2138,78 +2146,82 @@ msgid "Minimum" msgstr "Minimum" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Minimum:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Perc:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Egyéb" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Módosító:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Tevékenység mozgatás le" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Tevékenység mozgatás fel" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Mozgatás le" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Mozgatás fel" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Elem mozgatás fel" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Elem mozgatás le" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Példány mozgatás fel" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Feladat mozgatás le" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Feladat mozgatás fel" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Nézet mozgatása" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Mozgatás fel" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Váltózó mozgatás le" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Változó mozgatás fel" @@ -2221,26 +2233,26 @@ msgid "Multiplication" msgstr "Szorzás" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Sajátgép:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NÉV" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Név" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Név nem lehet üres!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Név:" @@ -2248,46 +2260,46 @@ msgid "Natural logarithm" msgstr "Természetes alapú logaritmus" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Negált" +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + #: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 msgid "Nevow/Athena import failed :" msgstr "" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Új" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Új elem" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "Nincs módosító" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "Nincs letöltendő PLC (sikeres volt a fordítás?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "POU \"%s\"-ban nincs semmi definiálva." -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2295,60 +2307,60 @@ "Dokumentáció nem elérhető\n" "Hamarosan érkezik." -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "Nincs elérhető keresési eredmény." -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "Nincs ilyen SVG fájl: %s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "Nem megőrzött" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Normál" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2357,7 +2369,7 @@ msgid "Not equal to" msgstr "Nem egyenlő" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Szekvenciák száma:" @@ -2365,24 +2377,24 @@ msgid "Numerical" msgstr "Numerikus" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "Változás esetén" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Csak elemek" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Megnyit" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "Inkscape Megnyitás" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." @@ -2391,67 +2403,67 @@ "környezet megvalósítva folyamatosan növekvő számű bővítményekkel, és " "rugalmas futásidejű PLC-vel." -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "Fájlkezelő megnyitása a projektek kezeléséhez" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "wxGlade Megnyitása" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Beállítás" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Beállítások" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Szervezet (opcionális)" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Másik Profil" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Kimenet" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO Fogadás" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO Küldés" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "PLC :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "PLC Log" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "PLC kód létrehozás nem sikerült!\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "A PLC üres vagy már el van indítva." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "PLC nincs elindítva." -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2460,15 +2472,15 @@ "PLC szintaktikai hiba az {a1} sorban:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen fájlok (*.xml)|*.xml|Minden fájl|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2478,205 +2490,205 @@ "\n" "A beremiz egy ..." -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "PORT" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "POU Név" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "POU Név:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "POU Típus" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "POU Típus:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Oldalbeállítás" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Oldalméret (opcionális):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Oldal: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Szülő példány" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Beillesztés" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "POU beillesztés" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Keresési minta:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Tüske száma:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Kérem válasszon célt" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "Kérem adja meg a blokk nevét" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "Kérem adja meg a megjegyzés szövegét" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "Kérem adja meg a lépés nevét" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "Kérem adja meg a szöveget" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "Kérem adjon értéket a '%s' változónak:" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "Port száma 0 és 65535 közé kell essen." -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "Port száma egész szám kell legyen!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "Áramsin" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "Áramsin Tulajdonságok" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "Előnézet" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "Előnézet:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Nyomtatás" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "Nyomtatási kép" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Prioritás" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Prioritás:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "PLC indítási hiba: hiba %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Terméknév" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Terméknév (kötelező):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "Termék kiadás (opcionális):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "Termék Verzió" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "Termék Verzió (kötelező):" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Program" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "Program sikeresen létrehozva!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Programok" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "A program nem használható más POU-k által!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Projekt" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "Projekt '%s':" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "Projekt Fájlok" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "Projektnév" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "Projektnév (kötelező):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "Projekt Verzió (opcionális):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2684,90 +2696,90 @@ "Projekt fájl szintaktikai hiba:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "Projekt tulajdonságok" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "Projekt fa elrendezése nem egyezik meg a confnode.xml -el {a1}!={a2}" -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "Terjesztési Név" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "Tulajdonságok" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "Kiadási szolgáltatás a helyi hálózaton" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Python kód" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Píthon fájl" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "Kilépés" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "Tartomány:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "Nyers IEC kód" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "Valóban törli a '%s' csomópontot?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "Újra" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "Referencia" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "Frissítés" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Reguláris kifejezés" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "Reguláris kifejezések" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "" @@ -2775,56 +2787,56 @@ msgid "Remainder (modulo)" msgstr "Maradék (modulo)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "Node %s eltávolítása" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "Adattípus eltávolítása" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "POU eltávolítása" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "Művelel eltávolítása" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "Elem eltávolítása" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "Bal oldali mappából a fájl eltávolítása" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "Példány eltávolítása" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Szolga eltávolítása" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "Feladat eltávolítása" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "Változó eltávolítása" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "Átnevezés" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "Fájl lecserélése" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "" @@ -2832,43 +2844,43 @@ msgid "Replacement (within)" msgstr "" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "Reset" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "Végrehajtási sorrend törlése" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "Perspektíva törlése" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "Keresési eredmény törlése" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Erőforrások" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "Megőriz" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "Visszatérési Típus:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "Jobb" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "Jobb Áramsin" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "Felfutóél" @@ -2884,114 +2896,114 @@ msgid "Rounding up/down" msgstr "Kerekítés fel/le" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "Fut" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "Futás idejú IO bővítmények C kódjának létrehozása nem sikerült!\n" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "Futás idejű könyvtárak C forráskódjának generálása nem sikerült!\n" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Mentés" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Mentés másként..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Mentés mint" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "Mentési elérési út ugyanaz mint a projekt elérési újta!\n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Keresés" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Keresés a Projektben" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Másodpercek:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Mindet kiválaszt" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Változó osztály kiválasztás:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Szerkesztő kiválasztás:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Példány kiválasztás" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Objektum kiválasztás" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" "A kiválasztott könyvtálr már tartalmaz egy másik projektet. Felülírjam?\n" @@ -3000,23 +3012,23 @@ msgid "Selection" msgstr "Kiválasztás" +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:65 -msgid "Selection Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:64 msgid "Selection Divergence" msgstr "" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Szolgáltatás Felfedezés" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Elérhető szolgáltatások:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Beállítás" @@ -3028,27 +3040,27 @@ msgid "Shift right" msgstr "Jobbra léptetés" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "PLCGenerator által létrehozott IEC kód mutatása" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Master mutatása" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Mutassa a config_utils által létrehozott Master-t" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Kód mutatása" +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Simultaneous Divergence" msgstr "" @@ -3056,15 +3068,15 @@ msgid "Sine" msgstr "Szinusz" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Egyes" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "Forrás nem változott, nincs újrafordítás.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3075,60 +3087,56 @@ msgid "Square root (base 2)" msgstr "" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "PLC indítása" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Fordítás indítása a %s-ban\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Elindult" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "PLC elindul\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Státusz Eszköztár" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Lépés" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Állj" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "PLC Állj" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Futó PLC megállítása" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Megállt" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Hibakereső megállítása...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Struktúra" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Altartomány" @@ -3136,19 +3144,19 @@ msgid "Subtraction" msgstr "Kivonás" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Sikeres fordítás.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "Perspektíva váltás" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "Szintaktikai hiba a keresési reguláris kifejezés mintában." -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "TÍPUS" @@ -3156,19 +3164,19 @@ msgid "Tangent" msgstr "Tangens" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Feladat" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Feladatok:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Ideiglenes" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3188,39 +3196,39 @@ "Itt lehet regisztrálni:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Változások történtek, menteni akarja?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Ez az opció még nem létezik!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "Ütem: %d" @@ -3258,94 +3266,94 @@ msgid "Time-of-day subtraction" msgstr "Napszak TOD kivonás" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "Érték átbillentés" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "Felső" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Átvitel" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "PLC átvitel" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Átvitel sikeresen befejezve.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Átvitel nem sikerült\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Átváltás" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "Triggerelés" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Típus" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "" @@ -3354,269 +3362,315 @@ msgid "Type conversion" msgstr "Típus konvertálás" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Típus:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Vissza" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Ismeretlen" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "Névtelen" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Névtelen %d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Felhasználói Adat Típus" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Érték" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Értékek:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Változó" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Változó Tulajdonságok" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Változó osztály" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "Változó nem ehhez a POU-hoz tartozik!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Változó:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Változók" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Függőleges" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "" -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Figyelmeztetés" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Teljes Projekt" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Szélesség:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Írta" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" msgstr "" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" msgstr "" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "" @@ -3632,24 +3686,24 @@ msgid "string right of" msgstr "" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "" -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "" -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" @@ -3714,6 +3768,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "" @@ -3890,7 +4010,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" msgid "The output produces a single pulse when a rising edge is detected." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_it_IT.po --- a/i18n/Beremiz_it_IT.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_it_IT.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Luca Magnabosco , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Luca Magnabosco , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Andrey Skvortsov , 2018\n" "Language-Team: Italian (Italy) (https://www.transifex.com/beremiz/teams/75746/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +18,7 @@ "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -34,151 +33,156 @@ "Traceback:\n" msgstr "" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " External" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr " InOut" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr " Input" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " Local" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr " Output" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr " Temp" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr " e %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr " generazione fallita!\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "Il tipo di dato \"%s\" non esiste !!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "La POU \"%s\" esiste già !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "La POU \"%s\" non esiste !!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" non può utilizzare se stesso!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "La config \"%s\" esiste già!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "La configurazione \"%s\" esiste già !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "Il tipo di dato \"%s\" esiste già!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "L'elemento \"%s\" per questa pou esiste già!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "La cartella \"%s\" non è un valido progetto Beremiz\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" è una parola chiave. Non può essere usata!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" è un valore non valido!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" non è una cartella valida!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" non è un identificatore valido!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "%s\" è utilizzato da una o più POU. Vuoi continuare?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "Il POU \"%s\" esiste già!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "Il passo \"%s\" esiste già!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "Il valore \"%s\" è già definito!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "Il valore \"%s\" non è una dimensione valida per un array!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -187,200 +191,196 @@ "Il valore \"%s\" non rappresenta una dimensione valida per un array!\n" "Il valore di destra deve essere maggiore del valore di sinistra." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "Funzione \"{a1}\" cancellata nel POU \"{a2}\": Nessun input connesso" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" è già utilizzato da \"{a2}\"!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "La risorsa \"{a1}\" esiste già nella configurazione di \"{a2}\" !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "La risorsa \"{a1}\" non esiste nella configurazione di \"{a2}\" !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03g ms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%d d" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%d h" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%d m" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%d ms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%d s" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s Data Types" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POUs" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s Profilo" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "Il corpo di %s non contiene istanze!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "Il corpo di %s non contiene testo!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Aggiungi Elemento" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Chiudi" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Configurazione" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Data Type" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Cancella" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Visualizzazione" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Modifica" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&File" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Funzione" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Help" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Licenza" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Programma" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Proprietà" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "Progetti &recenti" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Risorse" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "{a1}' - {a2} corrispondenza nel progetto" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} corrisponde nel progetto" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' si trova in {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d corrisponde)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1d" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1h" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -389,9 +389,9 @@ "Una POU contiene un elemento con nome \"%s\". Questo può causare un " "conflitto.Vuoi continuare?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "Esiste già una POU con nome \"%s\"!" @@ -401,26 +401,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Esiste già un figlio con nome \"{a1}\" -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Deve essere selezionata una locazione!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Esiste già un task con lo stesso nome!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Una variabile con \"1%s\" come nome è già esistente in questo POU!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Esiste già una variabile con il nome \"%s\"!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "Informazioni" @@ -428,126 +428,126 @@ msgid "Absolute number" msgstr "Numero assoluto" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Azione" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Blocco azione" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Nome dell'azione" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Nome dell'azione:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "L'azione con il nome %s non esiste!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Azioni" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Azioni:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Attivo" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Aggiungi" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Aggiungi Azione" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "" "Aggiungi codice C con accesso in modo sincrono alle variabili localizzate." -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Aggiungi Configurazione" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Aggiungi DataType" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Aggiuni un ramo divergente" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "Aggiungi IP" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "Aggiungi POU" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Aggiungi codice Python eseguito asincronomamente" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Aggiungi Risorsa" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Aggiungi Transazione" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Aggiungi un segmento di cavo" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Aggiungi un nuovo salto iniziale" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Aggiungi un nuovo salto" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Aggiungi un nuovo passo" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Aggiungi una semplice GUI basata su WxGlade." -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Aggiungi azione" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Aggiungi elemento" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Aggiungi instanza" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Aggiungi slave" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Aggiungi task" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Aggiungere variabile" @@ -555,44 +555,44 @@ msgid "Addition" msgstr "Somma" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "Blocchi funzione aggiuntivi" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Modificare la dimensione del blocco" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Allineamento" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Tutti" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Tutti i file (*.*)|*.*|CSV file (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Già connesso. Per favore disconnettere\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Un elemento con nome \"%s\" esiste già in questa struttura!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Un instanza con lo stesso nome esiste già!" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "Applicare la modifica del nome a tutte le istanze con lo stesso nome" @@ -612,8 +612,8 @@ msgid "Arithmetic" msgstr "Aritmetica" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Array" @@ -621,45 +621,37 @@ msgid "Assignment" msgstr "Assegnazione" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Deve essere selezionata almeno una variabile o un'espressione!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Autore" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Nome autore (opzionale):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Indietro" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Nome di dominio scorretto (circolare) a" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Nome di dominio scorretto a " - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "Dimensione della locazione sbagliata; %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Tipo base:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Tipi base" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -691,85 +683,85 @@ msgid "Bitwise inverting" msgstr "Inversione bit a bit" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Blocco" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Proprietà blocco" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Nome blocco" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Sotto" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "Rotto" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "Compila" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "Cartella di compilazione già vuota\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "Compila il progetto nella cartella di compilazione" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "La compilazione C si è bloccata inaspettatamente !\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "Compilazione C fallita.\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "Codice C" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "Codice C generato con successo.\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "Compilazione C fallita.\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "La compilazione C di %s è fallita,\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "Estensione C" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "Ringraziamenti" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "Rete CANOpen" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "Slave CANOpen" @@ -777,34 +769,34 @@ msgid "CANopen support" msgstr "Supporto CANopen" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "" @@ -814,46 +806,50 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Cambiare Nome" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "" @@ -861,115 +857,119 @@ msgid "Character string" msgstr "Stringa di caratteri" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Scegliere un file SVG" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Scegliere una cartella per salvare il progetto" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Scegliere n file" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Scegliere un progetto" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Scegliere un valore per %s:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Selezionare una cartella di lavoro " -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Classe" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Filtro Classi:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Classe:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Pulisci" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Cancella i messaggi di log" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Pulisci la cartella di compilazione del progetto" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Cancellando la cartella di compilazione\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Cancella gli Errori" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Pulisci l'Ordine di Esecuzione" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Chiusi" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Chiudi Applicazione" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Chiudi Progetto" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Chiudi Tab" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Bobina" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Commento" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Supporto della community" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Nome dell'azienda" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Nome dell'azienda (necessario):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "Indirizzo web dell'azienda (opzionale):" @@ -977,7 +977,7 @@ msgid "Comparison" msgstr "Comparazione" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "Compilando il IEC Programma IEC in codice C...\n" @@ -985,93 +985,93 @@ msgid "Concatenation" msgstr "Concatenazione" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Configurazione" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Configurazione varialibi" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Configurazione" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Configurazioni" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Conferma o cambia il nome della variabile" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Connetti" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Connetti al PLC target" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Connetti all URI: %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Connessione" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Proprietà della Connessione" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "Connessione cancellata!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "Connessione a %s fallita!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Connessione persa!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Connessione a '%s' fallita.\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Connettore" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Connettori:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Console" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Costante" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Contatto" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Descrizione del contenuto (opzionale):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Continuazione" @@ -1091,20 +1091,20 @@ msgid "Conversion to time-of-day" msgstr "Conversione a 'ora del giorno'" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Copia" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "Copia POU" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Copia il file dalla cartella di sinistra a quella di destra" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Copia il file dalla cartella di destra a quella di sinistra" @@ -1112,7 +1112,7 @@ msgid "Cosine" msgstr "Coseno" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1121,12 +1121,12 @@ "Non è possibile aggiungere un figlio \"{a1}\",tipo {a2}:\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Impossibile importare il vecchio file %s." -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1135,7 +1135,7 @@ "Impossibile caricare i parametri confnode di base {a1} :\n" " {a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1144,111 +1144,107 @@ "Impossibile caricare i parametri confnode {a1} :\n" " {a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Impossibile incollare un oggetto non-POU." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "Impossibile avviare il PLC !\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "Impossibile arrestare il PLC !\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Impossibile arrestare il debugger.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "Creare HMI" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Creare un nuovo POU" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Creare una nuova azione" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Creare un nuovo blocco azione" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Creare un nuovo blocco" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Creare una nuova diramazione" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Creare una nuovo relè" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Creare un nuovo commento" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Creare una nuova connessione" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Creare un nuovo contatto" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Creare una nuova divergenza" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Creare una nuova divergenza o convergenza" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Creare un nuovo passo iniziale" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Creare un nuovo salto" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Creare una nuova barra di alimentazione" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Crea un nuovo anello" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Creare un nuovo passo" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Creare una nuova transizione" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Creare una nuova variabile" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Ringraziamenti" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Cartella di lavoro corrente :" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Taglia" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Ciclico" @@ -1260,19 +1256,19 @@ msgid "DEPRECATED" msgstr "DEPRECATO" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "Profilo DS-301" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "Profilo DS-302" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Tipo di dato" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Tipi di dato" @@ -1293,67 +1289,59 @@ msgid "Date subtraction" msgstr "Sottrazzione della data" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Giorni:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Il debug non corrisponde al PLC arresta/trasferisci/avvia per riabilitare\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Istanza di Debug" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Debug: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Debug: Variabile sconosciuta '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Debug: Tipo non supportato per il debug '%s'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Debugger" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Debugger disabilitato\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Debugger pronto\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Debugger arrestato.\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Eliminare" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Eliminare la ramificazione divergente" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "Eliminare File" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Eliminare un segmento di filo" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Eliminare elemento" @@ -1361,47 +1349,47 @@ msgid "Deletion (within)" msgstr "Eliminazione (nei limiti)" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "Tipo di derivazione:" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "Descrizione" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Descrizione:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Dimensioni:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Direzione" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Direzione:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Direttamente" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Disconnetti" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Disconnetti dal PLC" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Disconnesso" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Divergenza" @@ -1409,121 +1397,121 @@ msgid "Division" msgstr "Divisione" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Vuoi veramente rimuovere il file '%s'?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Documentazione" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Fatto" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Durata" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS files (*.eds)|*.eds|All files|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Edita il Blocco" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Edita i valori del relè" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Edita i valori del contatto" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Edita la durata" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Edita il passo" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "Edita una GUI WxWidgets con WXGlade" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Edita le proprietà del blocco azione" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Edita le proprietà del tipo array" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Edita commento" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Edita file" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Edita elemento" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Edita la destinazione del salto" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" "Edita il codice IEC grezzo aggiunto al codice generato da PLCGenerator" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Edita il nome del passo" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Edita transizione" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Editor ToolBar" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Selezione dell'editor" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Elementi :" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Vuoto" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Abilita Annulla/Ripeti" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Inserisci un nome " -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Inserisci il numero di una porta " -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Inserisci l'IP dell'interfaccia da collegare" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Enum" @@ -1531,37 +1519,36 @@ msgid "Equal to" msgstr "Uguale a" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Errore" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" @@ -1569,49 +1556,56 @@ "Errore : Almeno una configurazione ed una risorsa devono essere dichiarate " "nel PLC!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Errore : il compilatore da IEC a C ha ritornato il codice %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" "%s\n" msgstr "" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "" @@ -1623,77 +1617,77 @@ msgid "Exponentiation" msgstr "" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "" @@ -1701,93 +1695,89 @@ msgid "Find position" msgstr "" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "" @@ -1799,110 +1789,114 @@ msgid "Greater than or equal to" msgstr "" +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + #: ../controls/ProjectPropertiesPanel.py:135 -msgid "Grid Resolution:" -msgstr "" - -#: ../runtime/NevowServer.py:182 -msgid "HTTP interface port :" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:121 msgid "Height:" msgstr "" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "" @@ -1910,114 +1904,124 @@ msgid "Insertion (into)" msgstr "" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Salto" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "" -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Lingua" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Lingua (opzionale):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Lingua:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Sinistra" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Barra di potenza di sinistra" @@ -2033,11 +2037,11 @@ msgid "Less than or equal to" msgstr "Inferiore o uguale a" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Libreria" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Licenza" @@ -2045,27 +2049,27 @@ msgid "Limitation" msgstr "Limitazione" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Locale" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Valori locali" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "" @@ -2073,12 +2077,12 @@ msgid "Logarithm to base 10" msgstr "" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "" @@ -2086,11 +2090,15 @@ msgid "Map located variables over CANopen" msgstr "" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Master" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" @@ -2099,29 +2107,29 @@ msgid "Maximum" msgstr "Massimo" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Massimo:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Memoria" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Microsecondi:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Centro" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Millisecondi:" @@ -2129,78 +2137,82 @@ msgid "Minimum" msgstr "Minimo" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Minimo:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Minuti:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Miscellanea" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Modificatore:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Azione muovi verso il basso" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Azione muovi verso l'alto" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Muovi verso il basso" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Muovi elemento verso il basso" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Muovi elemento verso l'alto" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Muovi l'istanza versio il basso" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Muovi l'istanza verso l'alto" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Muovi il task verso il basso" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Muovi il task verso l'alto" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Muovi la vista" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Muovi vero l'alto" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Muovi la variabile verso il basso" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Muovi la variabile verso l'alto" @@ -2212,26 +2224,26 @@ msgid "Multiplication" msgstr "Moltiplicazione" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Il mio Computer:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NOME" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Nome" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Il nome non deve essere vuoto!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Nome:" @@ -2239,105 +2251,105 @@ msgid "Natural logarithm" msgstr "Logaritmo naturale" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Negato" +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + #: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 msgid "Nevow/Athena import failed :" msgstr "" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Nuovo" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Nuovo elemento" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "No modificatore" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." msgstr "" -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "" -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Normale" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2346,7 +2358,7 @@ msgid "Not equal to" msgstr "Non uguale a" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Numero di sequenze:" @@ -2354,399 +2366,399 @@ msgid "Numerical" msgstr "Numerico" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Solo elementi" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Apri" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "Apri Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "" -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "Apri wxGlade" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Opzione" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Opzioni" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Organizzazione (opzionale):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Altro profilo" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Output" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "PLC :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "PLC Log" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "Generazione del codice PLC fallita !\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "PLC vuoto o già avviato." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "PLC non avviato." -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" "{a2}" msgstr "" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" "Beremiz is an " msgstr "" -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "PORTA" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "Nome POU" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "Nome POU:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "Tipo POU" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "Tipo POU:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Impostazioni pagina" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Dimensione pagina ()opzionale:" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Pagina: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Istanza padre" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Incolla" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "Incolla POU" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Pattern da cercare:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Numero di pin:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Per favore indicare un target" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Stampa" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Priorità" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Priorità:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "Problema durante l'avvio del PLC : errore %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Nome prodotto" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Nome prodotto (necessario):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Programma" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Programmi" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Progetto" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" msgstr "" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "" -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "" @@ -2754,56 +2766,56 @@ msgid "Remainder (modulo)" msgstr "" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "" @@ -2811,43 +2823,43 @@ msgid "Replacement (within)" msgstr "" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "" @@ -2863,114 +2875,114 @@ msgid "Rounding up/down" msgstr "" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "La transizione SFC nel POU \"%s\" deve essere connessa." -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST files (*.st)|*.st|All files|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG files (*.svg)|*.svg|All files|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Salva" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Salva come" -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Salva come" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "Il percorso scelto per il salvataggio è lo stesso di un progetto! \n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Cerca in" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Cerca" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Cerca nel Progetto" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Secondi:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Seleziona tutto" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Seleziona una classe per la variabile:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Seleziona un editor:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Seleziona un'istanza" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Seleziona un oggetto" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" "La cartella selezionata contiene già un altro progetto. Sovrascrivere? \n" @@ -2979,23 +2991,23 @@ msgid "Selection" msgstr "Selezione" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "Selezione Convergenza" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "Selezione Divergenza" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Scoperta Servizi" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Servici disponibili:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Imposta" @@ -3007,27 +3019,27 @@ msgid "Shift right" msgstr "Trasla a destra" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "Mostra il codice IEC generato da PLCGenerator" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Mostra il Master" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Mostra il Master generato da config_utils" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Mostra il codice" +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Simultaneous Divergence" msgstr "" @@ -3035,15 +3047,15 @@ msgid "Sine" msgstr "Seno" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Singolo" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "I file sorgente non sono cambiati, compilazione non necessaria.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3054,60 +3066,56 @@ msgid "Square root (base 2)" msgstr "Radice quadrata (base 2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "Blocchi funzione standard" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "Avvia il PLC" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Avvia la compilazione in %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Avviato" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "Avviando il PLC\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Barra di Stato" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Passo" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Arresto" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "Arresto PLC" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Arresto del PLC in esecuzione" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Arrestato" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Arrestando il debugger...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Struttura" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "" @@ -3115,19 +3123,19 @@ msgid "Subtraction" msgstr "Sottrazione" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Compilato con successo.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "Cambia layout grafico" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "Errore di sintassi nella 'regular expression' usata per la ricerca!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "TIPO" @@ -3135,19 +3143,19 @@ msgid "Tangent" msgstr "Tangente" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Task" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Tasks:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Temp" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3159,7 +3167,7 @@ "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3168,32 +3176,32 @@ "Il file '%s' esiste già.\n" "Vuoi sovrascriverlo?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "Il gruppo di blocchi deve essere coerente!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Ci sono dei cambiamenti, vuoi salvare?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Questa opzione non è ancora disponibile" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "Tick: %d" @@ -3231,94 +3239,94 @@ msgid "Time-of-day subtraction" msgstr "" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Trasferimento" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "Trasferimento PLC" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Trasferimento completato con successo.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Trasferimento fallito\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Transizione" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "Nome della transizione" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "Nome della transizione:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "La transizione con il nome %s non esiste!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "Transizioni" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "Tradotto da" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "" -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Yipo" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "Tipo e derivati" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "" @@ -3327,179 +3335,233 @@ msgid "Type conversion" msgstr "" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Tipo:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "Impossibile definire il PDO mapping per il nodo %02x" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "Tipo di POU \"%s\" non definito" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Annulla" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Sconosciuto" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Variabile \"%s\" sconosciuta per questo POU!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "Senza_nome" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Senza_nome%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Dimensione del dato non riconosciuta: \"%s\"" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Tipi definiti dall'utente" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "Tipo Utente" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "POU definiti dall'Utente" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Valore" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Valori:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Variabile" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Proprietà della variabile" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Classe della variabile" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "La variabile non appartiene a questo POU!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Variabile:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Variabili" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Verticale:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "" -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "WAMP connessione timeout" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "WAMP connessione a '1%s' fallita.\n" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "WAMP importazione fallita:" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Warning" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Warnings nel ST/IL/SFC generatore di codice:\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Intero Progetto" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Largezza:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Scritto da" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3507,7 +3569,7 @@ "Non il permesso di scrittura.\n" "Aprire Inkscape comunque?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3515,7 +3577,7 @@ "Non hai il permesso di scrittura.\n" "Aprire wxGlade comunque?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3523,7 +3585,7 @@ "Devi avere il permesso di lavorare al progetto\n" "Vuoi lavorare con una copia del progetto ?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" @@ -3531,73 +3593,65 @@ "Devi selezionare il blocco o il gruppo di blocchi attorno al quale il ramo " "deve essere aggiunto." -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "Devi selezionare un filo dove un contatto puo' essere aggiunto!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "Devi digitare un nome!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "Devi digitare un valore!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "Zoom" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "giorni" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "errore: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "uscito con stato {a1} (pid {a2})\n" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "file : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "funzione" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "funzione : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "blocco funzione" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "ore" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "linea: " - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "millisecondi" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "minuti" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "programma" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "secondi" @@ -3613,24 +3667,24 @@ msgid "string right of" msgstr "stringa a destra di" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "aggiornamento info non disponibile." -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "warning: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "{a1} \"{a2}\" non può essere copiato come {a3}." -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" "Il file XML {a1} non rispetta lo schema XSD alla linea %{a2}:\n" @@ -3697,6 +3751,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "ParametriBase" @@ -3872,7 +3992,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" msgid "The output produces a single pulse when a rising edge is detected." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_ko_KR.po --- a/i18n/Beremiz_ko_KR.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_ko_KR.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Andrey Skvortsov , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Andrey Skvortsov , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: IKHWAN KIM , 2017\n" "Language-Team: Korean (Korea) (https://www.transifex.com/beremiz/teams/75746/ko_KR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +18,7 @@ "Language: ko_KR\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -33,152 +32,167 @@ "\n" "Traceback:\n" msgstr "" - -#: ../controls/VariablePanel.py:72 +"\n" +"제어할 수 없는 예외상황 (버그)이 발생하였습니다. 버그 리포트는 다음과 같이 저장됩니다:\n" +"(%s)\n" +"\n" +"해당 파일을 다음과 같은 주소로 보내주시면 감사하겠습니다:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"프로그램을 재시작해야 합니다. \n" +"\n" +"Traceback:\n" + +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " 외부" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr " 입출력" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr " 입력" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " 로컬" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr " 출력" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr " 임시" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr " , %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "생성 실패!\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "\"%s\" 존재하지 않는 데이터 타입!!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "\"%s\" POU가 이미 존재합니다!!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "\"%s\" POU가 존재하지 않습니다!!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\": 자신을 사용 할 수 없습니다!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" 설정(config)이 이미 존재합니다!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "\"%s\" 설정(configuration)이 이미 존재합니다!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "\"%s\" 설정이 존재하지 않습니다!!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" -msgstr "\"%s\" 데이터 타입이 이미존재합니다!" - -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +msgstr "\"%s\" 데이터 타입이 이미 존재합니다!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "이 POU에 \"%s\" 항목이 이미 존재합니다!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "\"%s\" 베레미즈 프로젝트 폴더가 아닙니다\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" 는 키워드 입니다. 사용 할 수 없습니다!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" 유효하지 않은 값입니다!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" 유효하지 않은 폴더입니다!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\"는 유효하지 않은 식별자입니다!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" -msgstr "" - -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +msgstr "\"%s\"는 하나 이상의 POU에 의해 사용되고 있습니다. 계속하시겠습니까? " + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\" POU는 이미 존재합니다!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "\"%s\" 스텝이 이미 생성되었습니다!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" 이미 정의된 값이 있습니다!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" 값은 올바른 배열 차원이 아닙니다!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -187,209 +201,205 @@ "\"%s\" 올바른 데이터를 입력하세요!\n" "우측의 데이터는 좌측보다 커야 합니다." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" -msgstr "" - -#: ../editors/Viewer.py:251 +msgstr "\"{a2}\" POU 에서 \"{a1}\" 함수가 취소되었습니다: 입력이 연결되지 않았습니다. " + +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" -msgstr "" - -#: ../plcopen/plcopen.py:496 +msgstr "\"{a1}\" 은 \"{a2}\" 에 의해 사용되고 있습니다. " + +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" -msgstr "" - -#: ../plcopen/plcopen.py:514 +msgstr "\"{a1}\" 리소스는 \"{a2}\" 설정에 이미 존재합니다." + +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +msgstr "\"{a1}\" 리소스는 \"{a2}\" 설정에 존재하지 않습니다!!!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +msgstr "%03gms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +msgstr "%dd" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +msgstr "%dh" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +msgstr "%dm" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +msgstr "%dms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" -msgstr "" - -#: ../PLCControler.py:1533 +msgstr "%ds" + +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" -msgstr "" - -#: ../PLCControler.py:1516 +msgstr "%s 데이터 타입" + +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" -msgstr "" - -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +msgstr "%s POU들" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s 프로필" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "%s 인스턴스를 찾을 수 없습니다!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%s 텍스트를 찾을 수 없습니다!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&구성원 추가" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" -msgstr "" - -#: ../IDEFrame.py:356 +msgstr "&종료" + +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&설정(Configuration)" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&데이터 타입" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&삭제" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&보기" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" -msgstr "" - -#: ../IDEFrame.py:335 +msgstr "&편집" + +#: ../IDEFrame.py:340 msgid "&File" msgstr "&파일" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&함수" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&도움말" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" -msgstr "" - -#: ../IDEFrame.py:351 +msgstr "&라이센스" + +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&프로그램" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" -msgstr "" - -#: ../BeremizIDE.py:219 +msgstr "&속성" + +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&최근 프로젝트" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" -msgstr "" - -#: ../controls/SearchResultPanel.py:239 +msgstr "&리소스" + +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" -msgstr "" - -#: ../controls/SearchResultPanel.py:241 +msgstr "'{a1}' - 프로젝트내에서 {a2} 건이 매치됩니다. " + +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" -msgstr "" - -#: ../connectors/PYRO/__init__.py:90 +msgstr "'{a1}' - 프로젝트 내에서 {a2} 건이 매치됩니다." + +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" -msgstr "" - -#: ../controls/SearchResultPanel.py:291 +msgstr "'{a1}' 은 {a2} 위치에 있습니다.\n" + +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" -msgstr "" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +msgstr "(%d 건이 매치됨)" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- URI 종류를 선택하세요 - " + +#: ../controls/LogViewer.py:287 msgid "1d" -msgstr "" - -#: ../controls/LogViewer.py:280 +msgstr "1d" + +#: ../controls/LogViewer.py:288 msgid "1h" -msgstr "" - -#: ../controls/LogViewer.py:281 +msgstr "1h" + +#: ../controls/LogViewer.py:289 msgid "1m" -msgstr "" - -#: ../controls/LogViewer.py:282 +msgstr "1m" + +#: ../controls/LogViewer.py:290 msgid "1s" -msgstr "" - -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +msgstr "1s" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " "to continue?" msgstr "POU 구성원의 이름 \"%s\"은 오류를 발생시킬 수 있습니다. 계속 하시겠습니까?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "이미 생성된 POU 이름입니다 : \"%s\"" @@ -397,201 +407,201 @@ #: ../ConfigTreeNode.py:424 #, python-brace-format msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:218 +msgstr "\"{a1}\" 이름을 가진 child가 이미 존재합니다 ->\"{a2}\"\n" + +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "위치를 지정해야 합니다!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +msgstr "같은 이름을 가진 태스크가 존재합니다!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "변수 \"%s\"는 이미 POU에 정의 되어 있습니다!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" -msgstr "" - -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +msgstr "이름이 \"%s\"인 변수는 이미 존재합니다!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" -msgstr "" +msgstr "대하여" #: ../plcopen/iec_std.csv:22 msgid "Absolute number" msgstr "절대값 연산" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "액션(Action)" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" -msgstr "" - -#: ../dialogs/PouActionDialog.py:82 +msgstr "액션 블록" + +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "액션 명" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "액션 명:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "액션 명 %s는 이미 존재합니다!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "액션(Actions)" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "액션(Actions):" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" -msgstr "" - -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +msgstr "활성화" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "추가" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "액션 추가" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "동기적으로 위치한 변수를 액세스하는 C 코드를 추가합니다" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "설정(Configuration) 추가" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "데이터 타입 추가" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Branch 추가" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" -msgstr "" - -#: ../IDEFrame.py:1864 +msgstr "IP 추가" + +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "POU 추가" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "비동기적으로 실행되는 파이썬 코드를 추가합니다" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "리소스 추가" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "트랜지션(Transition) 추가" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "와이어 세그먼트(Wire Segment) 추가" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "새로운 초기 스텝 추가" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "새로운 점프 추가" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "새로운 스텝 추가" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "간단 WxGlade GUI를 추가합니다" -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" -msgstr "" - -#: ../editors/DataTypeEditor.py:352 +msgstr "액션 추가" + +#: ../editors/DataTypeEditor.py:364 msgid "Add element" -msgstr "" - -#: ../editors/ResourceEditor.py:268 +msgstr "구성원 추가" + +#: ../editors/ResourceEditor.py:283 msgid "Add instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:103 +msgstr "인스턴스 추가" + +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "슬레이브 추가" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" -msgstr "" - -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +msgstr "태스크 추가" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" -msgstr "" +msgstr "변수 추가" #: ../plcopen/iec_std.csv:33 msgid "Addition" msgstr "추가" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "추가적 함수 블록" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" -msgstr "" - -#: ../editors/Viewer.py:1686 +msgstr "블록 크기 조절" + +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "정렬" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "모두" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" -msgstr "" - -#: ../ProjectController.py:1685 +msgstr "모든 파일들 (*.*)|*.*|CSV files (*.csv)|*.csv" + +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" -msgstr "이미 접속중입니다. 연결을 해제 하세요\n" - -#: ../editors/DataTypeEditor.py:591 +msgstr "이미 접속되어 있습니다. 연결을 해제하세요\n" + +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "항목 \"%s\" 는 이미 구조체 안에 존재 합니다!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:100 +msgstr "같은 이름을 갖는 인스턴스가 존재합니다!" + +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" -msgstr "" +msgstr "같은 이름을 가지는 모든 연결자에 대해 이름 변경을 적용하세요." #: ../plcopen/iec_std.csv:31 msgid "Arc cosine" @@ -609,8 +619,8 @@ msgid "Arithmetic" msgstr "산술 연산" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "배열" @@ -618,45 +628,37 @@ msgid "Assignment" msgstr "할당" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "변수 또는 표현식이 필요합니다!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "작성자" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "작성자 이름(옵션):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" -msgstr "" - -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "도메인 이름이 올바르지 않습니다(circular 네임):" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "도메인 이름이 올바르지 않습니다:" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +msgstr "뒤로" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "잘못된 로케이션 사이즈: %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "기본 타입:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "기본 타입" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "베레미즈" @@ -688,169 +690,174 @@ msgid "Bitwise inverting" msgstr "비트 연산 반전 (Invert)" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:60 +msgstr "블록" + +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "블럭 속성" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" -msgstr "" - -#: ../editors/Viewer.py:550 +msgstr "블록 이름" + +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "하단" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +msgstr "깨짐" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:65 +msgstr "라이브러리에서 %s 값을 탐색" + +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "위치 탐색" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "빌드" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "빌드 디렉토리가 이미 비어 있습니다\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" -msgstr "현재 작성된 프로젝트를 빌드 폴더에 생성합니다" - -#: ../ProjectController.py:1080 +msgstr "현재 프로젝트를 빌드합니다" + +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "C 파일 빌드 과정에 문제가 있습니다!\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "C 파일 빌드에 실패 했습니다\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" -msgstr "" - -#: ../ProjectController.py:1155 +msgstr "C 코드" + +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "C 코드가 성공적으로 생성되었습니다\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" -msgstr "" - -#: ../targets/toolchain_gcc.py:192 +msgstr "C 컴파일 작업이 실패했습니다.\n" + +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "%s 의 C 컴파일 작업이 실패 했습니다\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "C 확장" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" -msgstr "" - -#: ../canfestival/NetworkEditor.py:52 +msgstr "크레딧" + +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" -msgstr "" - -#: ../canfestival/SlaveEditor.py:44 +msgstr "CANOpen 네트워크" + +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" -msgstr "" +msgstr "CANOpen 슬레이브" #: ../features.py:31 msgid "CANopen support" msgstr "CANopen 지원" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "FBD 네트워크 상태에서만 실행 순서를 생성할 수 있습니다!" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "로컬 또는 전역 변수만 위치 지정 가능합니다" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "프로그램을 %s 파일로 생성할 수 없습니다!" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "함수 블럭 인스턴스에는 위치를 지정할 수 없습니다" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "프로젝트를 %s로 저장할 수 없습니다!" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" -msgstr "" - -#: ../ConfigTreeNode.py:529 +msgstr "함수 블록 인스턴스에 대해 초기값을 설정할 수 없습니다. " + +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " -msgstr "" +msgstr "{a2} 타입의 차일드 {a1}을 생성할 수 없습니다." #: ../ConfigTreeNode.py:454 #, python-format msgid "Cannot find lower free IEC channel than %d\n" msgstr "%d보다 낮은 번호의 가용 IEC 채널을 검색하는데 실패했습니다\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "현재 PLC 상태를 알 수 없습니다 - 접속 실패.\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "VARIABLES.csv 파일을 열거나 파싱할 수 없습니다!\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +"Bool 타입이 아닌 '{a1}' 변수의 비트 오프셋을 설정할 수 없습니다. (ID:{a2},Idx:{a3},sIdx:{a4})) " + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "PLC가 동작중 일 때 전송 할 수 없습니다. 지금 중단하시겠습니까?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "대소문자 구별" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "중앙" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "바인드 인터페이스 IP 변경" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "이름 변경" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "POU 타입 변경" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "포트 번호 변경" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "작업 디렉토리 변경" @@ -858,115 +865,119 @@ msgid "Character string" msgstr "문자열" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "SVG 파일 선택" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "프로젝트 저장 디렉토리 선택" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "파일 선택" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "프로젝트 선택" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" -msgstr "" - -#: ../Beremiz_service.py:325 +msgstr "%s 을 위한 값을 선택하세요:" + +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "작업 디렉토리 선택" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "새로운 프로젝트를 위한 비어있는 디렉토리를 선택하세요" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "베레미즈 프로젝트 폴더를 선택해 주세요. 선택하신 폴더는 프로젝트 폴더가 아닙니다!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "선택된 폴더는 비어있지 않습니다. 새 프로젝트 폴더로 사용 할 수 없습니다!" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "클래스" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "클래스 필터:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "클래스:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "클린" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" -msgstr "" - -#: ../ProjectController.py:1838 +msgstr "로그 메세지 정리" + +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "프로젝트 빌드 폴더를 비웁니다" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "빌드 디렉토리를 비우는 중\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" -msgstr "" - -#: ../editors/Viewer.py:641 +msgstr "에러 정리" + +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "실행 순서 클리어" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" -msgstr "" - -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +msgstr "닫기" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "어플리케이션 닫기" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "프로젝트 닫기" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" -msgstr "" - -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +msgstr "탭 닫기" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" -msgstr "" - -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +msgstr "코일" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "코멘트" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" -msgstr "" - -#: ../dialogs/ProjectDialog.py:60 +msgstr "커뮤니티 지원" + +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:95 +msgstr "회사명" + +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "회사명(필수):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "회사 URL(옵션):" @@ -974,7 +985,7 @@ msgid "Comparison" msgstr "비교연산" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "IEC 프로그램을 C코드로 컴파일링 중...\n" @@ -982,95 +993,95 @@ msgid "Concatenation" msgstr "문자열 연결(concatenation)" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" -msgstr "" - -#: ../editors/ProjectNodeEditor.py:36 +msgstr "프로젝트 설정" + +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:40 +msgstr "설정 변수들" + +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "설정(Configuration)" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "구성(Configurations)" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" -msgstr "" - -#: ../ProjectController.py:1851 +msgstr "승인 또는 변수 이름을 변경하세요" + +#: ../ProjectController.py:1842 msgid "Connect" msgstr "연결하기" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "타겟 PLC와 연결" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +msgstr "URI: %s 에 연결되었습니다. " + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "연결" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "연결 속성" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "연결 취소!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "%s 연결에 실패 하였습니다!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:102 +msgstr "연결이 끊어졌습니다!\n" + +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +msgstr "'%s'와의 연결이 실패하였습니다.\n" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "연결자(Connector)" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "연결자(Connectors):" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" -msgstr "" - -#: ../controls/VariablePanel.py:60 +msgstr "콘솔" + +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "상수" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:198 +msgstr "지속 커넥터" + +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "컨텐츠 설명(옵션):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" -msgstr "지속 커넥터" +msgstr "지속 연결자" #: ../plcopen/iec_std.csv:18 msgid "Conversion from BCD" @@ -1088,158 +1099,160 @@ msgid "Conversion to time-of-day" msgstr "시간으로 변환" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "복사하기" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "POU 복사" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" -msgstr "" - -#: ../editors/FileManagementPanel.py:64 +msgstr "좌측폴더에서 우측폴더로 파일을 복사" + +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" -msgstr "" +msgstr "우측폴더에서 좌측폴더로 파일을 복사" #: ../plcopen/iec_std.csv:28 msgid "Cosine" msgstr "Cosine" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" "{a3}\n" msgstr "" - -#: ../py_ext/PythonFileCTNMixin.py:78 +"차일드 \"{a1}\" 를 추가할 수 없습니다, 타입 {a2} :\n" +"{a3}\n" + +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." -msgstr "" - -#: ../ConfigTreeNode.py:626 +msgstr "예전 파일 %s을 불러올 수 없습니다." + +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" " {a2}" msgstr "" - -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +"confnode 기본 파라메터들을 불러올 수 없었습니다 {a1}:\n" +"{a2}" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" " {a2}" msgstr "" - -#: ../PLCControler.py:948 +"confnode 파라메터들을 불러올 수 없었습니다 {a1}:\n" +"{a2}" + +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "POU 오브젝트만 붙여넣기 가능합니다" -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "PLC 를 시작 할 수 없습니다!\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "PLC 를 정지 할 수 없습니다!\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "디버거를 정지 할 수 없습니다.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "HMI 생성" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "새로운 POU 생성" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "새로운 액션 생성" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "새로운 액션 블럭 생성" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "새로운 블럭 생성" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "새로운 분기(Branch) 생성" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "새로운 코일 생성" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "새로운 코멘트 생성" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "새로운 연결 생성" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "새로운 접점 생성" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "새로운 분기(divergence) 생성" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "새로운 분기(divergence) 또는 합류(convergence) 생성" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "새로운 이니셜 스텝 생성" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "새로운 점프 생성" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "새로운 전원 레일 생성" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "새로운 Rung 생성" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "새로운 스텝 생성" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "새로운 트랜지션 생성" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "새로운 변수 생성" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" -msgstr "" - -#: ../Beremiz_service.py:434 +msgstr "크레딧" + +#: ../Beremiz_service.py:424 msgid "Current working directory :" -msgstr "" - -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +msgstr "현재 작업 디렉토리:" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "잘라내기" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "주기적" @@ -1251,19 +1264,19 @@ msgid "DEPRECATED" msgstr "사용중지됨" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "DS-301 프로필" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "DS-302 프로필" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "데이터 타입(Data Type)" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "데이터 타입(Data Types)" @@ -1284,66 +1297,58 @@ msgid "Date subtraction" msgstr "날짜 뺄셈" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" -msgstr "" - -#: ../ProjectController.py:1756 +msgstr "일:" + +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:134 +msgstr "디버그 정보가 PLC와 일치하지 않습니다 - 활성화를 위해 정지/전송/시작 버튼을 누르세요\n" + +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" -msgstr "" - -#: ../editors/Viewer.py:448 +msgstr "디버그 인스턴스" + +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "디버그: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" -msgstr "" - -#: ../ProjectController.py:1410 +msgstr "Debug: 알 수 없는 변수 '%s'\n" + +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" -msgstr "" - -#: ../IDEFrame.py:639 +msgstr "Debug: 지원되지 않는 자료형 '%s'\n" + +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "디버거" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "디버거 사용 불가\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" -msgstr "" - -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "디버거 정지.\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +msgstr "디버거가 준비되었습니다. \n" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "삭제" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "파생된 Branch 삭제 (Divergence Branch)" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" -msgstr "" - -#: ../editors/Viewer.py:560 +msgstr "파일 삭제" + +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "와이어 세그먼트 삭제" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "항목 삭제" @@ -1351,168 +1356,168 @@ msgid "Deletion (within)" msgstr "내부 삭제" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "미분 타입" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" -msgstr "" - -#: ../controls/VariablePanel.py:432 +msgstr "상세설명" + +#: ../controls/VariablePanel.py:463 msgid "Description:" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +msgstr "상세설명:" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "넓이:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:91 +msgstr "방향" + +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "방향:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "직접" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "연결 해제" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "PLC 연결 해제" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" -msgstr "" - -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +msgstr "연결 해제" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" -msgstr "" +msgstr "발산" #: ../plcopen/iec_std.csv:36 msgid "Division" msgstr "분할" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "정말 '%s' 파일을 삭제해도 될까요? " + +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "도움문서" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "완료" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "지속시간" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" -msgstr "" - -#: ../editors/Viewer.py:629 +msgstr "EDS 파일들 (*.eds)|*.eds|All files|*.*" + +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "블럭 수정" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "코일 데이터 수정" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "접접 데이터 수정" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:51 +msgstr "지속시간 수정" + +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "스텝 수정" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "WXGlade를 이용하여 GUI 수정" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "액션 블럭 속성 수정" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" -msgstr "" - -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +msgstr "배열 타입 속성 수정" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "코멘트 수정" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" -msgstr "" - -#: ../controls/CustomEditableListBox.py:39 +msgstr "파일 편집" + +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "항목 수정" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "점프 타겟 수정" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "PLCGenerator로 생성된 IEC 코드 수정" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "스텝 이름 수정" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "트랜지션 수정" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" -msgstr "" - -#: ../ProjectController.py:1257 +msgstr "툴바 에디터" + +#: ../ProjectController.py:1294 msgid "Editor selection" -msgstr "" - -#: ../editors/DataTypeEditor.py:348 +msgstr "에디터 선택" + +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "구성원:" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" -msgstr "" - -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "되돌리기/되돌리기 취소 활성화" - -#: ../Beremiz_service.py:333 +msgstr "비어있는" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "배열에서 비어있는 차원은 허용되지 않습니다. " + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "이름 입력" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "포트 번호 입력" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "바인드 인터페이스 IP 입력" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "열거형 데이터" @@ -1520,48 +1525,47 @@ msgid "Equal to" msgstr "같은 값 일때" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "에러" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "에러 : PLC 프로그램은 하나 이상의 설정과 리소스가 반드시 선언되어야 합니다!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "에러 : IEC -> C 컴파일러 %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1570,37 +1574,44 @@ "ST/IL/SFC 코드 생성기 에러 : \n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "저장 중 에러 발생 \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" -msgstr "" - -#: ../canfestival/canfestival.py:371 +msgstr "에러: 슬레이브 내보내기 실패\n" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "에러: Modbus/IP 서버 %{a1}.x와 %{a2}.x가 같은 port 번호 {a3}을 사용하고 있습니다.\n" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "에러 : 마스터 미생성 \"%s\"\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "에러 : PLC 빌드 미생성\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "%s접속중 예외 상황이 발생했습니다!\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "실행 제어:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "실행 순서:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "웹 기반의 HMI(실험중)" @@ -1612,171 +1623,167 @@ msgid "Exponentiation" msgstr "지수화" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +msgstr "CanOpen 슬레이브를 EDS 파일로 내보내기" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" -msgstr "" - -#: ../canfestival/canfestival.py:175 +msgstr "그래프 값들을 클립보드로 내보내기" + +#: ../canfestival/canfestival.py:185 msgid "Export slave" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:90 +msgstr "슬레이브 내보내기" + +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "표현식:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "외부" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "위치 변수(located variables) 추출 중...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "실패 : 빌드 후에 전송 하세요.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "폴링 엣지" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "치명적 오류 : 빌드 파일 생성 프로그램을 찾을 수 없습니다.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:164 +msgstr "%s 가져오기 중" + +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:166 +msgstr "필드 %s는 유효하지 않은 값입니다!" + +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" -msgstr "" - -#: ../controls/FolderTree.py:216 +msgstr "필드 %s는 유효한 값이 아닙니다!" + +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +msgstr "파일 '%s' 가 이미 존재합니다!" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" -msgstr "" - -#: ../IDEFrame.py:377 +msgstr "찾기" + +#: ../IDEFrame.py:379 msgid "Find Next" -msgstr "" - -#: ../IDEFrame.py:379 +msgstr "다음 찾기" + +#: ../IDEFrame.py:381 msgid "Find Previous" -msgstr "" +msgstr "이전 찾기" #: ../plcopen/iec_std.csv:90 msgid "Find position" msgstr "위치 찾기" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "실행환경 강제 리로딩\n" - -#: ../editors/Viewer.py:1600 +msgstr "찾기:" + +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "강제 데이터 입력" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "강제 변수 데이터" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "형식이 완성되지 않았습니다. %s 를 입력하세요!" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "형식이 완성되지 않았습니다. 이름을 입력하세요" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "형식이 완성되지 않았습니다. 블럭 타입을 선택하세요!" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +msgstr "앞으로" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "함수" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "함수 &블록" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "함수 블럭(Function Block)" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "함수 블럭 타입" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "함수 블럭(Function Blocks)" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "함수 블럭을 함수에서 사용할 수 없습니다!" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "함수 블럭 \"%s\" 을 함수에 붙여 넣기 할 수 없습니다!!!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "함수 (Functions)" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" -msgstr "" - -#: ../ProjectController.py:703 +msgstr "프로그램 생성" + +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "IEC-61131 기반의 ST/IL/SFC 코드 생성중...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "글로벌" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:174 +msgstr "현재 값으로 가기" + +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "그래픽" @@ -1788,110 +1795,114 @@ msgid "Greater than or equal to" msgstr "크거나 같은 값 일때" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "격자 해상도:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:121 +msgstr "HTTP 인터페이스 포트:" + +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "높이:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:151 +msgstr "홈 디렉토리:" + +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "가로:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +msgstr "시간:" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "IL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" -msgstr "" - -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +msgstr "IP" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "IP를 정확히 입력하세요!" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "SVG 가져오기" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "입출력" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "POU {a3} 안의 블록 {a2} 내의 입출력 변수 {a1}이 연결되어야 합니다. " + +#: ../editors/Viewer.py:473 msgid "Inactive" -msgstr "" - -#: ../controls/VariablePanel.py:276 +msgstr "비활성" + +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../controls/VariablePanel.py:282 +msgstr "\"{a1}\" 과 \"{a2}\" 의 데이터 형이 호환되지 않습니다." + +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "\"%s\"와 \"BOOL\"간의 데이터 크기가 호환되지 않습니다" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 +msgstr "\"{a1}\" 과 \"{a2}\" 의 데이터 크기가 호환되지 않습니다." + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "지시기(Indicator)" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" -msgstr "" - -#: ../editors/Viewer.py:611 +msgstr "초기값" + +#: ../editors/Viewer.py:650 msgid "Initial Step" -msgstr "" - -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +msgstr "초기 스텝" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "초기 값" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "초기 값:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "인라인" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "입력" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "입력(Inputs):" @@ -1899,114 +1910,128 @@ msgid "Insertion (into)" msgstr "대상에 삽입" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "ID %d의 인스턴스가 존재하지 않습니다!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "인스턴스:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "인터페이스" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "인터럽트" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "간격 (Interval)" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" +"부적절한 URL 입니다!\n" +"올바른 URL 주소를 입력하세요. " + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "알 수 없는 plcopen 항목입니다!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "위치 \"{a4}\" 에 대한 부적절한 타입 \"{a1}\"->{a2} != {a3}" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +msgstr "위치 \"{a4}\" 에 대한 부적절한 타입 \"{a1}\"->{a2} != {a3}" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "\"%s\"값은 디버그 변수에 적합하지 않습니다!" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" -msgstr "" - -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +msgstr "변수 그리드 엘리먼트에 대해 부적절한 값 \"%s\" 입니다" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "\"%s\" 값은 뷰어 블록에 적합하지 않습니다!" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:121 +msgstr "\"{a2}\" 변수에 대해 \"{a1}\" 값은 적절하지 않습니다!" + +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" - -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +"부적절한 값입니다!\n" +"숫자 값을 채우셔야 합니다." + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "연결이 보안 되어있습니까?" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +msgstr "점프" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "래더 항목 ID %d이 하나 이상의 Rung에 존재합니다" -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "언어" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "언어(옵션):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "언어:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "최근 빌드가 이미 타겟과 일치합니다. 전송합니다...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "WX GUI Inspector 실행" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Live Python Shell 실행" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "좌측" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "좌측 전원 레일" @@ -2022,52 +2047,52 @@ msgid "Less than or equal to" msgstr "작거나 같은 값 일때" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "라이브러리" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" -msgstr "" +msgstr "라이센스" #: ../plcopen/iec_std.csv:73 msgid "Limitation" msgstr "한도" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "링크 중 : \n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "로컬" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" -msgstr "" - -#: ../ProjectController.py:1703 +msgstr "Local Entries" + +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" -msgstr "" - -#: ../controls/VariablePanel.py:53 +msgstr "로컬 서비스 발견이 실패하였습니다!\n" + +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "위치" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" -msgstr "가능한 위치:" +msgstr "이용 가능한 Location:" #: ../plcopen/iec_std.csv:25 msgid "Logarithm to base 10" msgstr "상용로그(상용대수)" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +msgstr "'%s'에 대한 MDNS 확인 실패\n" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "변수 맵" @@ -2075,123 +2100,131 @@ msgid "Map located variables over CANopen" msgstr "CANopen 변수 맵" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "Modbus 상에서의 위치 변수 맵" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "CAN 마스터" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " -msgstr "" +msgstr "confnode 타입 {a2}에 대해 최대 카운트({a1})가 도달하였습니다." #: ../plcopen/iec_std.csv:71 msgid "Maximum" msgstr "최대값" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "최대값:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "메모리" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:49 +msgstr "툴바" + +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" -msgstr "" - -#: ../editors/Viewer.py:549 +msgstr "마이크로초:" + +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "중간" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" -msgstr "" +msgstr "밀리초:" #: ../plcopen/iec_std.csv:72 msgid "Minimum" msgstr "최소값" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "최소값:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:211 +msgstr "분:" + +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "기타" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "Modbus 지원" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "수정자:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:140 +msgstr "\"{a2}\" POU에서 하나 이상의 \"{a1}\" 연속적인 커넥터를 찾았습니다" + +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:139 +msgstr "액션을 아래로 이동" + +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" -msgstr "" - -#: ../controls/CustomEditableListBox.py:43 +msgstr "액션을 위로 이동" + +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "하단 이동" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" -msgstr "" - -#: ../editors/DataTypeEditor.py:354 +msgstr "엘리먼트를 아래로 이동" + +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" -msgstr "" - -#: ../editors/ResourceEditor.py:271 +msgstr "엘리먼트를 위로 이동" + +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" -msgstr "" - -#: ../editors/ResourceEditor.py:270 +msgstr "인스턴스를 아래로 이동" + +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" -msgstr "" - -#: ../editors/ResourceEditor.py:242 +msgstr "인스턴스를 위로 이동" + +#: ../editors/ResourceEditor.py:255 msgid "Move task down" -msgstr "" - -#: ../editors/ResourceEditor.py:241 +msgstr "태스크를 아래로 이동" + +#: ../editors/ResourceEditor.py:254 msgid "Move task up" -msgstr "" - -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +msgstr "태스크를 위로 이동" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "화면을 드래그하여 이동" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "상단 이동" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" -msgstr "" - -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +msgstr "변수를 아래로 이동" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" -msgstr "" +msgstr "변수를 위로 이동" #: ../plcopen/iec_std.csv:74 msgid "Multiplexer (select 1 of N)" @@ -2201,26 +2234,26 @@ msgid "Multiplication" msgstr "곱셈" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:92 +msgstr "내 컴퓨터:" + +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" -msgstr "" - -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "이름" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "이름" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "이름은 널(null)이 되어서는 안됩니다!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "이름:" @@ -2228,46 +2261,46 @@ msgid "Natural logarithm" msgstr "자연 로그" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "역 방향(Negate)" +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "Nevow 웹서비스 실패" + #: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 msgid "Nevow/Athena import failed :" -msgstr "" - -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +msgstr "Nevow/Athena 불러오기가 실패했습니다:" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "새로 만들기" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "새로운 아이템" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "수정자 없음" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "전송할 PLC 파일이 없습니다 (빌드 성공 여부를 확인하세요)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "\"%s\" POU에 바디(body)가 정의되어 있지 않습니다" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" -msgstr "" - -#: ../PLCOpenEditor.py:357 +msgstr "\"{a2}\" POU에서 연속적인 \"{a1}\" 커넥터를 찾을 수 없습니다. " + +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2275,69 +2308,69 @@ "현재 지원되는 도움 문서가 없습니다.\n" "지원 예정" -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "\"%s\"블럭에 대한 정보를 찾을 수 없습니다" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" -msgstr "" - -#: ../controls/SearchResultPanel.py:169 +msgstr "POU {a3} 내부 블록 {a2}에 대해 출력 변수 {a1}를 찾을 수 없습니다. 연결이 끊어졌음이 틀림없습니다." + +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "검색된 결과가 없습니다" -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" -msgstr "선택하신 %s파일은 없습니다\n" - -#: ../canfestival/config_utils.py:639 +msgstr "선택하신 %s SVG 파일은 없습니다\n" + +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" -msgstr "" - -#: ../canfestival/config_utils.py:362 +msgstr "({a1}, {a2})와 같은 index/subindex가 없습니다(변수 {a3})." + +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +msgstr "{a3} ID 에서 ({a1}, {a2})와 같은 index/subindex가 없습니다: (변수 {a4}). " + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "유효한 데이터 값을 선택하세요!" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "\"%s\" POU에 정의된 변수가 없습니다" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" -msgstr "" - -#: ../controls/VariablePanel.py:64 +msgstr "node ID {a1}이 존재하지 않습니다: (변수 {a2})" + +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "유지 안함(No Retain)" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "기본(Normal)" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" -msgstr "" +msgstr "PDO 매핑 가능한 변수가 아닙니다: '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" #: ../plcopen/iec_std.csv:80 msgid "Not equal to" msgstr "같지 않을 때" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "시퀀스 넘버:" @@ -2345,310 +2378,317 @@ msgid "Numerical" msgstr "수치(Numeric)" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:84 +msgstr "값 변경 알림" + +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "구성원 내부 검색" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" -msgstr "" - -#: ../svgui/svgui.py:143 +msgstr "프로젝트 불러오기" + +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "잉크스케이프 열기" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "" - -#: ../ProjectController.py:1878 +"IEC 61131 통합 개발환경과 다양한 확장 모듈들을 바탕으로 유연한 소프트 PLC 런타임을 생성하는, 자동화 분야를 위한 오픈 소스 " +"프레임워크" + +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:155 +msgstr "프로젝트 파일들을 관리하기 위해 파일 탐색기를 실행하세요" + +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "WxGlade 열기" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "옵션" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:98 +msgstr "옵션들" + +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "구성단체(옵션):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "다른 프로필" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "출력" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "수신 PDO" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "전송 PDO" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "PLC :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" -msgstr "" - -#: ../ProjectController.py:1054 +msgstr "PLC 로그" + +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" -msgstr "" - -#: ../Beremiz_service.py:297 +msgstr "PLC 코드 생성에 실패하였습니다!\n" + +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." -msgstr "" - -#: ../Beremiz_service.py:304 +msgstr "비어있는 PLC 이거나 PLC가 이미 시작되었습니다." + +#: ../Beremiz_service.py:312 msgid "PLC is not started." -msgstr "" - -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +msgstr "PLC가 시작되지 않았습니다." + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" "{a2}" msgstr "" - -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +"PLC 문법 에러 발생 {a1}:\n" +"{a2}" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen files (*.xml)|*.xml|모든 파일|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" "Beremiz is an " msgstr "" - -#: ../dialogs/DiscoveryDialog.py:95 +"PLCOpenEditor는 Beremiz 프로젝트의 일부입니다.\n" +"\n" +"Beremiz는" + +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" -msgstr "" - -#: ../dialogs/PouDialog.py:101 +msgstr "포트" + +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "POU 이름" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "POU 이름:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "POU 타입" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "POU 타입:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:61 +msgstr "PYRO가 URI:%s 에 연결중입니다. \n" + +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" -msgstr "" - -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +msgstr "PYRO는 '%s'에 있는 증명서를 사용합니다.\n" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "인쇄 페이지 설정" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "페이지 크기(옵션):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "인쇄 페이지: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" -msgstr "" - -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +msgstr "부모 인스턴스" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "붙여넣기" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "POU 붙여넣기" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "검색할 문자열 패턴:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "핀 넘버:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "타겟을 선택하세요" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" -msgstr "" - -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +msgstr "블록의 이름을 입력하세요" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "코멘트를 입력하세요" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "스텝 이름을 입력하세요" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "텍스트를 입력하세요" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "\"%s\" 변수의 데이터를 입력하세요" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "포트 번호는 0~65535까지 유효합니다!" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "포트 번호는 숫자로만 입력하세요!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:51 +msgstr "전원 레일" + +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "전원 레일 속성" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "인쇄 페이지 미리보기" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "인쇄 페이지 미리보기:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "인쇄" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "인쇄 미리보기" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "우선권" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "우선권:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" -msgstr "" - -#: ../dialogs/ProjectDialog.py:58 +msgstr "PLC를 시작하는데 문제가 발생했습니다: 에러 %d" + +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:81 +msgstr "제품명" + +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "제품 이름(필수):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "제품 출시 번호(옵션):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:82 +msgstr "제품 버전" + +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "제품 버젼(필수):" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "프로그램" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "프로그램이 성공적으로 생성되었습니다!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "프로그램(Programs)" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "다른 POU에서 사용할 수 없는 프로그램입니다!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "프로젝트" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" -msgstr "" - -#: ../ProjectController.py:1877 +msgstr "프로젝트 '%s':" + +#: ../ProjectController.py:1878 msgid "Project Files" -msgstr "" - -#: ../dialogs/ProjectDialog.py:57 +msgstr "프로젝트 파일" + +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:79 +msgstr "프로젝트 명" + +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "프로젝트 명(필수):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "프로젝트 버젼(옵션):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2656,90 +2696,90 @@ "프로젝트 파일 구문 오류:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "프로젝트 속성" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " -msgstr "" - -#: ../dialogs/ConnectionDialog.py:98 +msgstr "프로젝트 트리 레이아웃이 confnode.xml과 일치하지 않습니다. {a1}!={a2}" + +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" -msgstr "" - -#: ../PLCControler.py:99 +msgstr "연결자 이름 수정" + +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "속성" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" -msgstr "" - -#: ../connectors/PYRO/__init__.py:118 +msgstr "로컬 네트워크에 서비스를 퍼블리싱하는 중" + +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" -msgstr "" - -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 +msgstr "Pyro 예외상황: %s\n" + +#: ../Beremiz_service.py:420 msgid "Pyro port :" -msgstr "" - -#: ../py_ext/PythonEditor.py:81 +msgstr "Pyro 포트:" + +#: ../py_ext/PythonEditor.py:84 msgid "Python code" -msgstr "" - -#: ../features.py:33 +msgstr "Python 코드" + +#: ../features.py:34 msgid "Python file" msgstr "파이썬 파일" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "한정자" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "프로그램 종료" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "범위:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "IEC 코드" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" -msgstr "" - -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +msgstr " 정말로 노드 '%s' 를 지우겠습니까?" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "렐름:" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "되돌리기 취소" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "레퍼런스" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "새로고침" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "정규 표현식" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" -msgstr "" - -#: ../editors/Viewer.py:1603 +msgstr "정규 표현식" + +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "강제 데이터 입력 해제" @@ -2747,100 +2787,100 @@ msgid "Remainder (modulo)" msgstr "잔여 (모듈)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" -msgstr "" - -#: ../IDEFrame.py:2419 +msgstr "%s 노드 제거" + +#: ../IDEFrame.py:2445 msgid "Remove Datatype" -msgstr "" - -#: ../IDEFrame.py:2424 +msgstr "데이터 타입 제거" + +#: ../IDEFrame.py:2450 msgid "Remove Pou" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:138 +msgstr "POU 제거" + +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" -msgstr "" - -#: ../editors/DataTypeEditor.py:353 +msgstr "액션 제거" + +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" -msgstr "" - -#: ../editors/FileManagementPanel.py:63 +msgstr "엘리먼트 제거" + +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" -msgstr "" - -#: ../editors/ResourceEditor.py:269 +msgstr "좌측 폴더로부터 파일 제거" + +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:104 +msgstr "인스턴스 제거" + +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "슬레이브 제거" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" -msgstr "" - -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +msgstr "태스크 제거" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" -msgstr "" - -#: ../IDEFrame.py:1948 +msgstr "변수 제거" + +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "이름 변경" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" -msgstr "" - -#: ../editors/Viewer.py:561 +msgstr "파일 교체" + +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" -msgstr "" +msgstr "와이어를 연결자로 교체" #: ../plcopen/iec_std.csv:89 msgid "Replacement (within)" msgstr "내부 교체" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "리셋 코일(Unlatch)" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "실행 순서 초기화" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" -msgstr "" - -#: ../controls/SearchResultPanel.py:105 +msgstr "풀 스크린 에디팅 모드에서 복귀" + +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" -msgstr "" - -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +msgstr "검색 결과 재설정" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "리소스" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "유지 변수" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "반환(Return) 타입:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "우측" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "우측 전원 레일" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "라이징 엣지" @@ -2856,138 +2896,138 @@ msgid "Rounding up/down" msgstr "라운딩 업/다운" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "실행" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" -msgstr "" - -#: ../ProjectController.py:1108 +msgstr "런타임 IO 확장 C 코드 생성에 실패했습니다 !\n" + +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +msgstr "런타임 라이브러리 확장 C 코드 생성에 실패했습니다 !\n" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "SDO 클라이언트" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "SDO 서버" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" -msgstr "" - -#: ../PLCGenerator.py:773 +msgstr "POU \"{a1}\"에 있는 SFC jump는 존재하지 않는 SFC 스텝 \"{a2}\"를 참조합니다." + +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +msgstr "POU \"%s\" 안의 SFC 트랜지션은 연결이 되어야 합니다." + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST 파일 (*.st)|*.st|모든 파일|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG 파일 (*.svg)|*svg|모든 파일|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" -msgstr "" - -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +msgstr "저장" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." -msgstr "" - -#: ../BeremizIDE.py:224 +msgstr "다른 이름으로 저장..." + +#: ../BeremizIDE.py:249 msgid "Save as" -msgstr "" - -#: ../ProjectController.py:511 +msgstr "다른 이름으로 저장" + +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:69 +msgstr "저장 경로는 프로젝트 경로와 동일하여야 합니다!\n" + +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "검색 범위" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "검색" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "프로젝트 내부 검색" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" -msgstr "" - -#: ../IDEFrame.py:388 +msgstr "초:" + +#: ../IDEFrame.py:390 msgid "Select All" -msgstr "" - -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +msgstr "전부 선택" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "변수 클래스 선택:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:281 +msgstr "에디터 선택" + +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" -msgstr "" - -#: ../IDEFrame.py:607 +msgstr "인스턴스 선택" + +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "오브젝트 선택" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" -msgstr "" +msgstr "선택한 디렉토리는 다른 프로젝트가 사용중입니다. 덮어쓰겠습니까?\n" #: ../plcopen/iec_std.csv:70 msgid "Selection" msgstr "선택" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "수렴(Convergence) 선택" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "벡터 발산(Divergence) 선택" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:85 +msgstr "서비스 발견" + +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "서비스 이용 가능:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "셋팅 코일(Latch)" @@ -2999,27 +3039,27 @@ msgid "Shift right" msgstr "우측이로 이동(Shift)" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "PLCGenerator가 생성한 IEC 코드 보기" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "마스터 보기" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "config_util(설정 유틸리티)에 의해 생성된 마스터 보기" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "코드 보기" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "동시 수렴" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "동시 발산" @@ -3027,79 +3067,75 @@ msgid "Sine" msgstr "Sine" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "싱글" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" -msgstr "" - -#: ../PLCGenerator.py:397 +msgstr "소스파일이 변경되지 않았습니다, 재빌드되지 않습니다.\n" + +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " "'{a2}.{a3}'." -msgstr "" +msgstr "소스 신호는 리소스 '{a2}.{a3}' 내의 단일 태스크 '{a1}' 에 대해서 정의되어야만 합니다. " #: ../plcopen/iec_std.csv:23 msgid "Square root (base 2)" msgstr "제곱근 (SQRT: base 2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "기본 함수 블럭" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "PLC 시작" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "%s에서 빌드를 시작합니다\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" -msgstr "" - -#: ../ProjectController.py:1648 +msgstr "시작됨" + +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "PLC 시작중\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" -msgstr "" - -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +msgstr "툴바" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" -msgstr "" - -#: ../ProjectController.py:1846 +msgstr "스텝" + +#: ../ProjectController.py:1835 msgid "Stop" msgstr "정지" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "PLC 정지" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "작동중인 PLC 정지" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" -msgstr "" - -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "디버거 정지중...\n" - -#: ../editors/DataTypeEditor.py:54 +msgstr "멈춤" + +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "구조" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "서브레인지" @@ -3107,39 +3143,39 @@ msgid "Subtraction" msgstr "뺄셈 연산" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "성공적으로 빌드 완료 되었습니다\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +msgstr "풀 스크린 에디팅 모드로 전환" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "정규 표현식에 적합하지 않은 검색어 입니다!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" -msgstr "" +msgstr "타입" #: ../plcopen/iec_std.csv:29 msgid "Tangent" msgstr "Tangent" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "태스크" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "태스크:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "임시" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3150,30 +3186,39 @@ "You can subscribe to the list here:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" - -#: ../editors/FileManagementPanel.py:180 +"Beremiz 및 PLCOpenEditor에 관한 질문들을 남길 수 있는 제일 좋은 장소는 프로젝트 메일링 리스트입니다: beremiz-devel@lists.sourceforge.net\n" +"\n" +"이곳은 메인 커뮤니티 지원 채널입니다. \n" +"글을 남기기 위해서는 메일링 리스트를 구독해야 합니다.\n" +"\n" +"메일링 리스트 구독은 다음 주소에서 가능합니다:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" + +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" - -#: ../editors/LDViewer.py:882 +"파일 '%s' 가 이미 존재합니다. \n" +"정말 교체하겠습니까?" + +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "블럭 그룹은 일관성을 가져야 합니다!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" -msgstr "" - -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +msgstr "변경된 사항이 있습니다, 저장하시겠습니까?" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "\"%s\" POU 에 문제가 있을 수 있습니다. 계속 하시겠습니까?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3181,14 +3226,14 @@ "인쇄 작업에 문제가 있습니다.\n" "프린터 설정을 확인하세요" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "선택하신 옵션은 지원되지 않습니다!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" -msgstr "" +msgstr "Tick: %d" #: ../plcopen/iec_std.csv:40 msgid "Time" @@ -3223,94 +3268,94 @@ msgid "Time-of-day subtraction" msgstr "하루의 시간 빼기" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" -msgstr "" - -#: ../editors/Viewer.py:548 +msgstr "값을 토글" + +#: ../editors/Viewer.py:584 msgid "Top" msgstr "상단" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "전송" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "PLC에 전송" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "전송이 성공적으로 완료되었습니다\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "전송 실패\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" -msgstr "" - -#: ../PLCGenerator.py:1518 +msgstr "트랜지션" + +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:84 +msgstr "트랜지션 \"%s\" body는 출력 변수 또는 출력 변수의 이름을 참조하는 코일을 포함해야 합니다." + +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "트랜지션 이름" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "트랜지션 이름:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:1598 +msgstr "컨텐츠 \"{a1}\"의 트렌지션은 \"{a2}\" POU 내의 다음 스텝으로 연결되지 않았습니다. " + +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" -msgstr "" - -#: ../plcopen/plcopen.py:1323 +msgstr " 컨텐츠 \"{a1}\"의 트랜지션은 \"{a2}\" POU 내의 이전 스텝으로 연결되지 않았습니다. " + +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "%s 트랜지션 이름이 존재 하지 않습니다!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "트랜지션" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "번역자" + +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "트리거링 스위치" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "Twisted 모듈을 이용할 수 없습니다." + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "타입" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" -msgstr "" - -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +msgstr "타입과 파생형 타입" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "\"%s\" 타입 에러" @@ -3319,179 +3364,233 @@ msgid "Type conversion" msgstr "변환 타입" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "타입 정보:" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +msgstr "엄격한 형" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "타입:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "URI 호스트:" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "URI 포트:" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "URI 종류:" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "PDO 매핑 정의 에러:%02x" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "Xenomai의 %s 를 가져 올 수 없습니다\n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:254 +msgstr "\"{a2}\" POU에서 정의되지 않은 블록 타입 \"{a1}\"" + +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "\"%s\" 의 POU 타입이 정의되지 않았습니다" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "되돌리기" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" -msgstr "" - -#: ../editors/Viewer.py:394 +msgstr "알려지지 않은" + +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "\"%s\" 변수를 현재 POU에서 알 수 없습니다!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" -msgstr "" - -#: ../PLCControler.py:638 +msgstr "이름이 없는" + +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "이름 없음%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "\"%s\"의 데이터 크기를 알 수 없습니다" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "사용자 데이터 타입" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "사용자 타입" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "사용자 정의 POU" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "데이터 값" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "데이터 값:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "변수" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:64 +msgstr "변수 드롭" + +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "변수 속성" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "변수 클래스" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "POU에 속하지 않는 변수 입니다!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" -msgstr "" - -#: ../controls/VariablePanel.py:72 +msgstr "변수:" + +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "변수" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "수직:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "WAMP 클라이언트 연결이 실패하였습니다 (%s) ...재시도 중..." + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "WAMP 클라이언트 연결이 끈겼습니다 (%s) ..재시도중.." + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "WAMP 아이디:" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "WAMP 클라이언트가 연결중입니다:" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "WAMP 클라이언트 연결이 성립되지 않았습니다!" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " -msgstr "" - -#: ../connectors/WAMP/__init__.py:91 +msgstr "WAMP 클라이언트의 시작이 실패했습니다." + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "WAMP 설정이 불완전합니다." + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "WAMP 설정이 누락되어 있습니다." + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" -msgstr "" - -#: ../connectors/WAMP/__init__.py:131 +msgstr "WAMP URL에 연결중입니다: %s\n" + +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" -msgstr "" - -#: ../connectors/WAMP/__init__.py:150 +msgstr "WAMP 연결 타임아웃" + +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" -msgstr "" - -#: ../Beremiz_service.py:564 +msgstr "WAMP '%s'에 연결이 실패하였습니다.\n" + +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:37 +msgstr "WAMP 불러오기 실패:" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "WAMP 로드 에러:" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "WAMP 세션 종료" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "WAMP 비밀 로드 에러:" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "경고" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "ST/IL/SFC 코드 생성기 경고:\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "프로젝트 전체 검색" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "폭:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" -msgstr "" - -#: ../dialogs/AboutDialog.py:130 +msgstr "페이지 끝까지 검색한 후 처음으로 와서 다시 검색" + +#: ../dialogs/AboutDialog.py:126 msgid "Written by" -msgstr "" - -#: ../features.py:34 +msgstr "개발자" + +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3499,7 +3598,7 @@ "현재 쓰기 권한이 없습니다\n" "그래도 Inkscape를 열까요?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3507,7 +3606,7 @@ "현재 쓰기 권한이 없습니다\n" "그래도 WxGlade를 열까요?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3515,81 +3614,73 @@ "프로젝트 작업에는 권한이 필요합니다\n" "사본으로 작업하시겠습니까?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "Branch를 추가할 블럭 또는 블럭 그룹을 선택해야 합니다!" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "접점에 추가될 와이어를 선택해야 합니다!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "이름을 입력하세요!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "데이터 값을 입력하세요!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "확대(Zoom)" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" -msgstr "" - -#: ../PLCOpenEditor.py:343 +msgstr "일" + +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "에러: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" -msgstr "" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "파일 :" - -#: ../dialogs/PouDialog.py:32 +msgstr "상태 {a1}과 함께 종료되었음 (pid {a2})\n" + +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "함수" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "함수 :" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "함수 블럭" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" -msgstr "" - -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "라인 :" - -#: ../dialogs/DurationEditorDialog.py:157 +msgstr "시간" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "matiec 설치 경로를 찾을 수 없습니다.\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 +msgstr "밀리초" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" -msgstr "" - -#: ../dialogs/PouDialog.py:32 +msgstr "분" + +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "프로그램" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" -msgstr "" +msgstr "초" #: ../plcopen/iec_std.csv:84 msgid "string from the middle" @@ -3603,26 +3694,28 @@ msgid "string right of" msgstr "우측 문자열" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." -msgstr "" - -#: ../PLCOpenEditor.py:341 +msgstr "업데이트 정보를 이용할 수 없습니다." + +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "경고: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." -msgstr "" - -#: ../ConfigTreeNode.py:56 +msgstr "{a1} \"{a2}\"는 {a3}으로 붙여넣을 수 없습니다." + +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" +"{a1} XML 파일은 XSD 스키마를 따르지 않습니다. 라인 넘버 {a2}:\n" +"{a3}" #: Extra XSD strings msgid "CanFestivalSlaveNode" @@ -3656,10 +3749,10 @@ msgstr "CAN 드라이버" msgid "Generic" -msgstr "" +msgstr "지너릭" msgid "Command" -msgstr "" +msgstr "명령" msgid "Xenomai" msgstr "Xenomai" @@ -3685,6 +3778,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "Modbus 요청" + +msgid "SlaveID" +msgstr "슬레이브ID" + +msgid "Nr_of_Channels" +msgstr "채널 수" + +msgid "Start_Address" +msgstr "시작 주소" + +msgid "Timeout_in_ms" +msgstr "타임아웃_ms" + +msgid "MemoryArea" +msgstr "메모리공간" + +msgid "MemoryAreaType" +msgstr "MemoryArea 종류" + +msgid "ModbusTCPclient" +msgstr "ModbusTCP 클라이언트" + +msgid "Remote_IP_Address" +msgstr "원격 IP 주소" + +msgid "Remote_Port_Number" +msgstr "원격 포트 번호" + +msgid "Invocation_Rate_in_ms" +msgstr "ms당 호출비율" + +msgid "ModbusServerNode" +msgstr "Modbus 서버 노드" + +msgid "Local_IP_Address" +msgstr "로컬 IP 주소" + +msgid "Local_Port_Number" +msgstr "로컬 Port 번호" + +msgid "ModbusRTUclient" +msgstr "ModbusRTU 클라이언트" + +msgid "Serial_Port" +msgstr "시리얼 포트" + +msgid "Baud_Rate" +msgstr "보레이트" + +msgid "Parity" +msgstr "패리티" + +msgid "Stop_Bits" +msgstr "스탑 비트" + +msgid "ModbusRTUslave" +msgstr "ModbusRTU 슬레이브" + +msgid "ModbusRoot" +msgstr "Modbus 루트" + +msgid "MaxRemoteTCPclients" +msgstr "최대 원격 TCP 클라이언트" + msgid "BaseParams" msgstr "베이스 파라메터" @@ -3710,205 +3869,209 @@ msgstr "확장 모듈 제거 (Extension 제거)" msgid "%(codefile_name)s" -msgstr "" +msgstr "%(codefile_name)s" msgid "variables" -msgstr "" +msgstr "변수들" msgid "variable" -msgstr "" +msgstr "변수" msgid "name" -msgstr "" +msgstr "이름" msgid "type" -msgstr "" +msgstr "타입" msgid "class" -msgstr "" +msgstr "클래스" msgid "initial" -msgstr "" +msgstr "초기" msgid "desc" -msgstr "" +msgstr "설명" msgid "onchange" -msgstr "" +msgstr "값 변경 알림" msgid "opts" -msgstr "" +msgstr "옵션들" #: Extra TC6 documentation strings msgid "0 - current time, 1 - load time from PDT" -msgstr "" +msgstr "0 - 현재 시간, 1 - PDT로부터 시간 읽어오기" msgid "Preset datetime" -msgstr "" +msgstr "날짜 기본설정" msgid "Copy of IN" -msgstr "" +msgstr "IN의 복사" msgid "Datetime, current or relative to PDT" -msgstr "" +msgstr "태평양 일광 절약 시간 기준으로 현재 또는 그에 상대적인 현재 시간" msgid "" "The real time clock has many uses including time stamping, setting dates and" " times of day in batch reports, in alarm messages and so on." -msgstr "" +msgstr "실시간 시계는 타임 스탬핑, batch 리포트에서의 시간/날짜 설정, 알람 메세지 등과 같은 일에 사용됩니다. " msgid "1 = integrate, 0 = hold" -msgstr "" +msgstr "1 = 인테그레이트, 0 = 홀드" msgid "Overriding reset" -msgstr "" +msgstr "Overriding 리셋" msgid "Input variable" -msgstr "" +msgstr "입력 변수" msgid "Initial value" -msgstr "" +msgstr "초기값" msgid "Sampling period" -msgstr "" +msgstr "샘플링 주기" msgid "NOT R1" -msgstr "" +msgstr "R1이 아님" msgid "Integrated output" -msgstr "" +msgstr "적분된 출력" msgid "" "The integral function block integrates the value of input XIN over time." -msgstr "" +msgstr "적분 함수 블록은 시간에 따라 입력 XIN의 값을 적분합니다." msgid "0 = reset" -msgstr "" +msgstr "0 = 리셋" msgid "Input to be differentiated" -msgstr "" +msgstr "미분되어야 하는 입력" msgid "Differentiated output" -msgstr "" +msgstr "미분된 출력" msgid "" "The derivative function block produces an output XOUT proportional to the " "rate of change of the input XIN." -msgstr "" +msgstr "미분 함수 블록은 입력 XIN의 변화율에 비례하는 출력 XOUT을 생성합니다." msgid "0 - manual , 1 - automatic" -msgstr "" +msgstr "0 - 수동, 1 - 자동" msgid "Process variable" -msgstr "" +msgstr "프로세스 변수" msgid "Set point" -msgstr "" +msgstr "셋 포인트" msgid "Manual output adjustment - Typically from transfer station" -msgstr "" +msgstr "수동 출력값 조정 - 일반적으로 전송 스테이션으로부터" msgid "Proportionality constant" -msgstr "" +msgstr "비례 상수" msgid "Reset time" -msgstr "" +msgstr "시간 초기화" msgid "Derivative time constant" -msgstr "" +msgstr "미분 시간 상수" msgid "PV - SP" -msgstr "" +msgstr "PV-SP" msgid "FB for integral term" -msgstr "" +msgstr "적분항을 위한 함수 블록" msgid "FB for derivative term" -msgstr "" +msgstr "미분항을 위한 함수 블록" msgid "" "The PID (proportional, Integral, Derivative) function block provides the " "classical three term controller for closed loop control." -msgstr "" +msgstr "PID (비례, 적분, 미분) 함수 블록은 폐루프 제어를 위한 세 가지 항 제어기를 제공합니다. " msgid "0 - track X0, 1 - ramp to/track X1" -msgstr "" +msgstr "0 - X0 따라가기, 1 - X1 ramp / X1 따라가기 " msgid "Ramp duration" -msgstr "" +msgstr "Ramp 지속시간" msgid "BUSY = 1 during ramping period" -msgstr "" +msgstr "ramping 주기동안 BUSY = 1" msgid "Elapsed time of ramp" -msgstr "" +msgstr "ramp의 경과된 시간" msgid "The RAMP function block is modelled on example given in the standard." -msgstr "" +msgstr "RAMP 함수 블록은 표준에서 주어진 예제를 모델로 합니다." msgid "" "The hysteresis function block provides a hysteresis boolean output driven by" " the difference of two floating point (REAL) inputs XIN1 and XIN2." msgstr "" +"히스테리시스 기능 블록은 두 개의 부동 소수점 (REAL) 입력 XIN1 및 XIN2의 차이로 구동되는 히스테리시스 부울 출력을 " +"제공합니다." msgid "The SR bistable is a latch where the Set dominates." -msgstr "" +msgstr "SR bistable은 Set 도미넌트한 래치입니다." msgid "The RS bistable is a latch where the Reset dominates." -msgstr "" +msgstr "RS bistable은 Reset 도미넌트한 래치입니다." msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." -msgstr "" +"exclusive access to certain resources." +msgstr "세마포어는 소프트웨어 엘리먼트들이 특정 자원에 접근에 대해 상호배제 매커니즘을 제공합니다." msgid "The output produces a single pulse when a rising edge is detected." -msgstr "" +msgstr "상승 엣지가 감지되면 출력은 단일한 펄스를 만들어냅니다. " msgid "The output produces a single pulse when a falling edge is detected." -msgstr "" +msgstr "하강 엣지가 검출되면 출력은 단일한 펄스를 만들어냅니다." msgid "" "The up-counter can be used to signal when a count has reached a maximum " "value." -msgstr "" +msgstr "업 카운터는 카운트가 최대값에 도달하였을때 신호를 주기 위해 사용될 수 있습니다. " msgid "" "The down-counter can be used to signal when a count has reached zero, on " "counting down from a preset value." -msgstr "" +msgstr "다운 카운터는 특정 값에서부터 감소하여 제로값이 될 때 신호를 주기 위해 사용될 수 있습니다. " msgid "" "The up-down counter has two inputs CU and CD. It can be used to both count " "up on one input and down on the other." msgstr "" +"업 다운 카운터는 두 개의 입력값 CU,CD을 가집니다. 입력값들은 하나의 입력을 업 카운트하거나 다운 카운트하는데 사용될 수 있습니다." +" " msgid "first input parameter" -msgstr "" +msgstr "첫번째 입력 파라메터" msgid "second input parameter" -msgstr "" +msgstr "두번째 입력 파라메터" msgid "first output parameter" -msgstr "" +msgstr "첫번째 출력 파라메터" msgid "second output parameter" -msgstr "" +msgstr "두번째 출력 파라메터" msgid "internal state: 0-reset, 1-counting, 2-set" -msgstr "" +msgstr "초기 상태: 0-리셋, 1-카운팅, 2-셋" msgid "" "The pulse timer can be used to generate output pulses of a given time " "duration." -msgstr "" +msgstr "펄스 타이머는 주어진 시간동안의 아웃풋 펄스 생성에 사용될 수 있습니다. " msgid "" "The on-delay timer can be used to delay setting an output true, for fixed " "period after an input becomes true." -msgstr "" +msgstr "온 딜레이 타이머는 입력이 참이 된 이후 고정된 시간 동안 출력 설정을 참으로 지연시키는데 사용될 수 있습니다. " msgid "" "The off-delay timer can be used to delay setting an output false, for fixed " "period after input goes false." -msgstr "" +msgstr "오프 딜레이 타이머는 입력이 거짓값이 된 이후 고정된 시간 동안 출력 설정을 거짓값으로 지연시키는데 사용될 수 있습니다. " diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_nl_NL.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_nl_NL.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4056 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Jordy van der Heijden , 2018\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/beremiz/teams/75746/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "Extern" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "InUit" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "Invoer" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "Lokaal" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "Uitvoer" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "Tijdelijk" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "en %s" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "Datatype \"%s\" bestaat niet !!!" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "\"%s\" bestaat al !!!" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "\"%s\" bestaat niet !!!" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "\"%s\" config bestaat al !!!" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "\"%s\" configuratie bestaat al !!!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "\"%s\" configuratie bestaat niet !!!" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "\"%s\" datatype bestaat al !!!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "\"%s\" element voor deze POU bestaat al !!!" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "\"%s\" map is geen geldig Beremiz project.\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "\"%s\" is een keyword en mag niet gebruikt worden." + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "\"%s\" is een ongeldige waarde!" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "\"%s\" is geen geldige map!" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "\"%s\" is geen geldige identifier!" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "\"%s\" POU bestaat al!" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "\"%s\" stap bestaat al!" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "\"%s\" waarde al gedefiniëerd!" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "\"%s\" waarde is geen geldige arraydimensie!" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" +"\"%s\" waarde is geen geldige arraydimensie! Rechterwaarde moet groter zijn " +"dan linkerwaarde." + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "\"{a1}\" functie afgebroken in \"{a2}\" POU: Geen invoer aangesloten!" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "\"{a1}\" wordt al gebruikt door \"{a2}\"!" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "\"{a1}\" bron bestaat al in \"{a2}\" configuratie !!!" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "\"{a1}\" bron bestaat niet in \"{a2}\" configuratie !!!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "%03gms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "%dd" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "%dh" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "%dm" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "%dms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "%ds" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "%sDatatypes" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "%sPOU's" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "%sProfiel" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "%sbody heeft geen instances!" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "%sbody heeft geen tekst!" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "&Element Toevoegen" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "&Sluiten" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "&Configuratie" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "&Datatype" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "&Verwijderen" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "&Weegeven" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "&Wijzigen" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "&Bestand" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "&Functie" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "&Help" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "&Licentie" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "&Programma" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "&Eigenschappen" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "&Recente Projecten" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "&Bron" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "'{a1}' - {a2} overeenkomst in project." + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "'{a1}' - {a2} overeenkomsten in project." + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "'{a1}' bevindt zich op {a2} \n" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "(%d overeenkomsten)" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr ", %s" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "1d" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "1u" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "1m" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "1s" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" +"Een POU heeft een element genaamd \"%s\". Dit kan een conflict veroorzaken. " +"Wilt u toch doorgaan?" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "Er bestaat al een POU genaamd \"%s\"!" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "Een kind genaamd \"{a1}\" bestaat al -> \"{a2}\"\n" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "Er moet een locatie geselecteerd worden!" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "Er bestaat al een taak met dezelfde naam!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "Er bestaat al een variabele met de naam \"%s\" in deze POU!" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "Er bestaat al een variabele met de naam \"%s\"!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "Over" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "Absoluut getal" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "Actie" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "Actieblok" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "Actienaam" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "Actienaam:" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "Er bestaat geen actie met naam \"%s\"!" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "Acties" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "Acties:" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "Actief" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "Toevoegen" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "Actie Toevoegen" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "Configuratie Toevoegen" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "Datatype Toevoegen" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "Divergentietak Toevoegen" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "IP Toevoegen" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "POU Toevoegen" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "Asynchrone Pythoncode toevoegen" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "Bron Toevoegen" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "Overgang Toevoegen" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "Draadsegment Toevoegen" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "Nieuwe Initiële Stap Toevoegen" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "Nieuwe Sprong Toevoegen" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "Nieuwe Stap Toevoegen" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "Simpele WxGlade GUI Toevoegen" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "Actie Toevoegen" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "Element Toevoegen" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "Instance Toevoegen" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "Slaaf Toevoegen" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "Taak Toevoegen" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "Variabele Toevoegen" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "Toevoeging" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "Extra Functieblokken" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "Blokgrootte Aanpassen" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "Uitlijning" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "Alles" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "Alle bestanden (*.*)|*.*|CSV (*.csv)|*.csv" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "Al verbonden. Verbinding verbreken alstublieft.\n" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "Er bestaat al een element genaamd \"%s\" in deze constructie!" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "Er bestaat al een instance met dezelfde naam!" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "Naamwijziging toepassen op alle continuations met dezelfde naam." + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "Boogcosinus" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "Boogsinus" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "Boogtangens" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "Rekenkundig" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "Array" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "Opdracht/Toewijzing" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "Er moet minstens één variabele of uitdrukking geselecteerd worden!" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "Auteur" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "Auteursnaam (optioneel):" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "Ongeldige locatiegrootte: %s" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "Basistype:" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "Basistypes" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "Beremiz" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "Binaire selectie (1 van 2)" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "Bitverschuiving" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "Bitsgewijs" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "Bitsgewijze AND" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "Bitsgewijze OR" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "Bitsgewijze XOR" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "Bitsgewijze inversie" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "Blok" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "Blokeigenschappen" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "Bloknaam" + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "Bodem" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "Kapot" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "%s waardenbibliotheek doorbladeren," + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "Locaties doorbladeren." + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "Compileer" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "Compilatiemap al schoon.\n" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "Compileer project in compilatiemap" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "C compilatie vastgelopen!\n" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "C compilatie niet geslaagd!\n" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "C code" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "C code succesvol gegenereerd.\n" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "C compilatie niet geslaagd.\n" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "C compilatie van %s niet geslaagd.\n" + +#: ../features.py:33 +msgid "C extension" +msgstr "C uitbreiding" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "C&redits" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "CANOpen netwerk" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "CANOpen slaaf" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "CANOpen ondersteuning" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "Kan alleen een locatie toewijzen aan lokale of globale variabelen" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "Kan geen programma genereren naar bestand%s!" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "Kan geen locatie toewijzen aan een functieblok instance" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "Kan project niet opslaan naar bestand %s!" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "Kan geen initiële variabele instellen voor een functieblok." + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "Kan geen {a1} kind aanmaken van type {a2}" + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "Kan geen lager vrij IEC kanaal vinden dan %d\n" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "Kan geen PLC status opvragen - verbinden niet gelukt\n" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "Kan VARIABLES.csv niet openen/verwerken!\n" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" +"Kan geen bit-offset instellen voor niet-booleaanse '{a1}' variabele " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "Hoofdlettergevoelig" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "Centreer" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "Verander IP of interface om te binden" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "Naam Wijzigen" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "Verander POU-type Naar" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "Verander Poortnummer" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "Verander Werkmap" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "Karakterstreng" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "Kies een SVG-bestand" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "Kies een map om het project in op te slaan" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "Kies een bestand" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "Kies een project" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "Kies een waarde voor %s:" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "Kies een werkmap" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Kies een lege map voor een nieuw project" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "Gekozen map bevat geen programma. Het is geen geldig project." + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" +"De gekozen map is niet leeg. Je kunt het niet gebruiken voor een nieuw " +"project!" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "Klasse" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "Klassefilter:" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "Klasse:" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "Schoonmaken" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "Maak berichtenlog schoon" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "Project buildmap schoonmaken" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "Buildmap aan het schoonmaken\n" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "Foutmeldingen verwijderen" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "Uitvoerorder verwijderen" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "Sluiten" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "Programma Afsluiten" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "Project Sluiten" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "Tab Sluiten" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "Commentaar" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "Community Ondersteuning" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "Bedrijfsnaam" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "Bedrijfsnaam (verplicht):" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "Bedrijfs-URL (optioneel):" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "Vergelijking" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "IEC Progamma compileren naar C-code...\n" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "Aaneenschakeling" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "Config" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "Config variabelen" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "Configuratie" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "Configuraties" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "Bevestig of verander variabelenaam" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "Verbinden" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "Verbind met doel-PLC" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "Verbonden met URI: %s" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "Verbinding" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "Verbindingseigenschappen" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "Verbinden afgebroken!\n" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "Verbinden met %s niet gelukt!\n" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "Verbinding verbroken!\n" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "Verbinden met '%s' niet gelukt! \n" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "Stekker" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "Stekkers:" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "Constante" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "Contact" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "Inhoudsbeschrijving (optioneel):" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "Vervolg" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "Conversie van BCD" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "Conversie naar BCD" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "Conversie naar datum" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "Conversie naar tijd van de dag" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "Kopiëren" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "POU Kopiëren" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "Bestand kopiëren van linker- naar rechtermap" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "Bestand kopiëren van rechter- naar linkermap" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "Cosinus" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" +"Kan kind \"{a1}\", type {a2} niet toevoegen:\n" +"{a3}\n" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "Kan oud%s bestand niet importeren." + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" +"Kan conflode basisparameters {a1} niet laden:\n" +"{a2}" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" +"Kan conflode parameters {a1} niet laden:\n" +"{a2}" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "Kan niet-POU object niet plakken." + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "Kan PLC niet opstarten!\n" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "Kan PLC niet stoppen!\n" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "Maak HMI" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "Maak een nieuwe POU" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "Maak een nieuwe actie" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "Maak een nieuw actieblok" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "Maak een nieuw blok" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "Maak een nieuwe tak" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "Maak een nieuwe opmerking" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "Maak een nieuwe verbinding" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "Maak een nieuw contact" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "Maak een nieuwe divergentie" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "Maak een nieuwe di- of convergentie" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "Maak een nieuwe beginstap" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "Maak een nieuwe sprong" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "Maak een nieuwe spanningslijn" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "Maak een nieuwe stap" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "Maak een nieuwe overgang" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "Maak een nieuwe variabele" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "Credits" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "Huidige werkmap:" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "Knip" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "Cyclisch" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "VEROUDERD" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "DS-301 Profiel" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "DS-302 Profiel" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "Datatype" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "Datatypes" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "Datatypeconversie" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "Datatoevoeging" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "Datum- en tijdaftrekking" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "Datumaftrekking" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "Dagen:" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" +"Debug komt niet overeen met PLC - stop/transfer/start om opnieuw in te " +"schakelen\n" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "Instance Debuggen" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "Debuggen: %s" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "Debug: Onbekende variabele '%s'\n" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "Debug: Type om te debuggen '%s' wordt niet ondersteund\n" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "Debugger" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "Debugger klaar\n" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "Verwijderen" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "Divergerende Tak Verwijderen" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "Bestand Verwijderen" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "Draadsegment Verwijderen" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "Item Verwijderen" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "Afleidingstype:" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "Beschrijving" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "Beschrijving:" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "Dimensies:" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "Richting" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "Richting:" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "Direct" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "Verbinding Verbreken" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "Verbinding met PLC verbreken" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "Verbinding Verbroken" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "Divergentie" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "Deling" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "Weet u zeker dat u het bestand '%s' wilt verwijderen?" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "Documentatie" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "Klaar" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "Duur" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "EDS bestanden (*.eds)|*.eds|All files|*.*" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "Blok wijzigen" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "Contactwaarden Wijzigen" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "Duur Wijzigen" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "Stap Wijzigen" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "Een WxWidgets GUI with WXGlade wijzigen" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "Actieblokeigenschappen wijzigen" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "Arraytype-eigenschappen wijzigen" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "Opmerking Wijzigen" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "Bestand Wijzigen" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "Item Wijzigen" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "Springdoel wijzigen" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" +"Wijzig rauwe IEC-code die toegevoegd is aan de door PLCGenerator " +"gegenereerde code" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "Stapnaam wijzigen" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "Vertaling Wijzigen" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "Editor ToolBar " + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "Editorkeuze" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "Elementen:" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "Leeg" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Lege dimensie niet toegestaan." + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "Voer een naam in" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "Voer een poortnummer in" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "Voer het IP van de te binden interface in" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "Gelijk aan" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "Fout" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" +"Fout: Er moeten tenminste één configuratie en één bron gedeclareerd worden " +"in de PLC!\n" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "Fout: IEC naar C compiler geeft %d\n" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" +"Fout in ST/IL/SFC codegenerator:\n" +"%s\n" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "Fout tijdens het opslaan \"%s\"\n" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "Fout: Export Slaaf niet gelukt\n" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "Fout: Geen Meester gegenereerd\n" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" +"De uitgang produceert één enkele puls wanneer een stijgende flank wordt " +"gedetecteerd." + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" +"De uitgang produceert één enkele puls wanneer een dalende flank wordt " +"gedetecteerd." + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" +"De opteller kan gebruikt worden om aan te geven wanneer een teller de " +"maximale waarde heeft bereikt." + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" +"De afteller kan gebruikt worden om aan te geven wanneer een teller de nul " +"heeft bereikt na het aftellen vanaf een vooraf ingestelde waarde." + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" +"De op/af-teller heeft twee ingangen, CU en CD. Deze kan gebruikt worden om " +"op één ingang op, en de andere af te tellen." + +msgid "first input parameter" +msgstr "eerste ingangsparameter" + +msgid "second input parameter" +msgstr "tweede ingangsparameter" + +msgid "first output parameter" +msgstr "eerste uitgangsparameter" + +msgid "second output parameter" +msgstr "tweede uitgangsparameter" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "Interne staat: 0-reset, 1-tellen, 2-set" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" +"Met de pulse timer kunt u uitgangspulsen met een bepaalde tijdsduur " +"genereren." + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" +"Met de on-delay timer kunt instellen hoe lang na het 'waar' worden van de " +"ingang, de uitgang 'waa' geschakeld wordt. " + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" +"Met de off-delay timer kunt instellen hoe lang na het 'onwaar' worden van de" +" ingang, de uitgang 'onwaar' geschakeld wordt. " diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_pl.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_pl.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4032 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Adam B , 2018\n" +"Language-Team: Polish (https://www.transifex.com/beremiz/teams/75746/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" +"\n" +"Wystąpił nieobsługiwany wyjątek (błąd). Raport błędu zapisano w:\n" +"(%s)\n" +"\n" +"Proszę o przesłanie go na adres:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"Zaleca się zrestartowanie programu.\n" +"\n" +"Przegląd:\n" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "Zewnętrzny" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "WeWyj" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "Wejście" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "Lokalny" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "Wyjście" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "Tymczasowe" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "i %s" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "generowanie nieudane!\n" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "\"%s\" Typ danych nie istnieje !!!" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "\"%s\" POU już istnieje!" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "\"POU %s\" nie istnieje !!!" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "\"%s\" nie może używać samego siebie!" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "Konfiguracja \"%s\" już istnieje!" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "Konfiguracja \"%s\" już istnieje !!!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "Konfiguracja \"%s\" nie istnieje !!!" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "Typ danych \"%s\" już istnieje!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "Element \"%s\" dla tego pou już istnieje!" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "Folder \"%s\" nie jest prawidłowym projektem Beremiz\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "\"%s\" jest słowem kluczowym. Nie można go użyć!" + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "\"%s\" jest nieprawidłową wartością!" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "\"%s\" nie jest prawidłowym folderem!" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "\"%s\" nie jest prawidłowym identyfikatorem!" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "\"%s\" jest używane przez jeden lub więcej POU. Czy chcesz kontynuować?" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "\"%s\" pou już istnieje!" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "Krok \"%s\" już istnieje!" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "\"%s\" wartość już zdefiniowana!" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "\"%s\" wartość nie jest prawidłowym wymiarem tablicy!" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" +"\"%s\" wartość nie jest prawidłowym wymiarem tablicy!\n" +"Prawa wartość musi być większa od lewej." + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "Funkcja \"{a1}\" anulowana w \"{a2}\" POU: brak podłączonego wejścia" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "\"{a1}\" jest już używane przez \"{a2}\"!" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "Zasób \"{a1}\" już istnieje w konfiguracji \"{a2}\" !!!" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "Zasób \"{a1}\" nie istnieje w konfiguracji \"{a2}\" !!!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "%03gms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "%dd" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "%dh" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "%dm" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "%dms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "%ds" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "%s Typy danych" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "%s POU" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "%s Profil" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "%s 'body' nie ma instancji!" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "%s 'body' nie ma tekstu!" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "&Dodaj element" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "&Zamknij" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "&Konfiguracja" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "&Typ danych" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "&Usuń" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "&Wyświetlanie" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "&Edytuj" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "&Plik" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "&Funkcja" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "&Pomoc" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "&Licencja" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "&Program" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "&Właściwości" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "&Ostatnie projekty" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "&Zasoby" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "\"{a1}\" - {a2} powiązanie w projekcie" + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "\"{a1}\" - {a2} powiązań w projekcie" + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "\"{a1}\" znajduje się w {a2}\n" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "(%d powiązań)" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr ", %s" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- Wybierz typ URI -" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "1d" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "1h" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "1m" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "1s" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" +"POU ma element o nazwie \"%s\". Może to spowodować konflikt. Czy chcesz " +"kontynuować?" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "POU o nazwie \"%s\" już istnieje!" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "Podobiekt o nazwie \"{a1}\" już istnieje -> \"{a2}\"\n" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "Lokalizacja musi być wybrana!" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "Zadanie o tej samej nazwie już istnieje!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "Zmienna o nazwie \"%s\" już istnieje w tym pou!" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "Zmienna o nazwie \"%s\" już istnieje!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "O programie" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "Liczba bezwzględna" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "Akcja" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "Blok akcji" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "Nazwa akcji" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "Nazwa akcji:" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "Akcja o nazwie %s nie istnieje!" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "Akcje" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "Akcje:" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "Aktywny" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "Dodaj" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "Dodaj akcję" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "" + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "" + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "" + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "" + +#: ../features.py:33 +msgid "C extension" +msgstr "" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "" + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "" + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "" + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "" + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "" + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "" + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" + +msgid "first input parameter" +msgstr "" + +msgid "second input parameter" +msgstr "" + +msgid "first output parameter" +msgstr "" + +msgid "second output parameter" +msgstr "" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_pt.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_pt.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4036 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Pedro Coimbra , 2017\n" +"Language-Team: Portuguese (https://www.transifex.com/beremiz/teams/75746/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "Externo" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "EntradaSaída" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "Entrada" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "Local" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "Saída" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "Temp" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "e %s" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "geração falhada !\n" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "\" %s \" O tipo de dados não existe !!!" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "\" %s \" POU já existe !!!" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "\" %s \" POU não existe !!!" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "\"%s\" não pode usar-se!" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "\"%s \" config já existe!" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "\"%s\" configuração já existe !!!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "\"%s\" o tipo de dados já existe!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "\"%s\" o elemento para esta pou já existe!" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "\"%s\" o ficheiro não é um projecto Beremiz válido\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "\"%s\" é uma palavra-chave. Não pode ser usada!" + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "\"%s\" é um valor inválido!" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "\"%s\" não é um ficheiro válido!" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "\"%s\" não é um identificador válido!" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "\"%s\" é usáda por uma ou mais POUs. Deseja continuar?" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "\"%s\" pou já existe!" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "\"%s\" o passo já existe!" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "\"%s\" valor já defenido|" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "\"%s\" o valor não é uma dimensão de matriz válida!" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" +"\"%s\" o valor não é uma dimensão de matriz válida!\n" +"O valor direito tem de ser maior do que o valor esquerdo." + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "\"{a1}\" função cancelada na POU \"{a2}\" : Sem entrada conectada" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "\"{a1}\" já está a ser usada por \"{a2}\"!" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "o recurso\"{a1}\" já existe na configuração\"{a2}\" !!!" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "o recurso\"{a1}\" não existe na configuração\"{a2}\" !!!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "%03gms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "%dd" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "%dh" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "%dm" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "%dms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "%ds" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "%s Tipo de dados" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "%s POUs" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "%s Perfil" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "%s o corpo não tem instâncias!" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "%s o corpo não tem texto!" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "&Adicione elemento" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "&Fechar" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "&Configuração" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "&Tipo de dados" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "&Apagar" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "&Exibir" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "&Editar" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "&Ficheiro" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "&Função" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "&Ajuda" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "&Licensa" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "&Programa" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "&Propriedades" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "&Projectos recentes" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "&Recurso" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "'{a1}' - {a2} é idêntico no projecto" + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "'{a1}' - {a2} são idênticos no projecto" + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "'{a1}' está localizado em {a2}\n" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "(%d corresponde)" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr ", %s" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "1d" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "1h" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "1m" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "1s" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" +"Uma POU contém um elemento chamado \"%s\" Isto pode causar um conflito. " +"Deseja continuar?" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "Uma POU chmada \"%s\" já existe!" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "Um filho chamado \"{a1}\" ajá existe -> \"{a2}\"\n" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "Uma localização tem de ser seleccionada!" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "Uma tarefa com o mesmo nome já existe!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "Uma variavel com o nome\"%s\" já existe nesta pou!" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "Uma variavel com o nome\"%s\" já existe!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "Sobre" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "Numero absoluto" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "Acção" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "Bloco de acção" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "Nome da acção" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "Nome da acção:" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "A acção com o nome \"%s\" não existe!" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "Acções" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "Acções:" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "Activo" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "Adicionar" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "Adicionar acção" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "Adicionar codigo C acessando variaveis localizadas sincronamente" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "Adicionar Configuração" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "Adicionar um Tipo de Dados" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "Adicionar um Ramo de divergência" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "Adicionar IP" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "Adicionao POU" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "Adicionar codigo Python executado assincronamente" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "Adicionar Recurso" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "Adicionar Transição" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "Adicionar seguemento de ligação" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "Adicionar um novo passo de inicio" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "Adicionar um novo salto" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "Adicionar um novo passo" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "Adicionar um simples GUI baseado em WxGlade" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "Adicionar acção" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "Adicionar elemento" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "Adicionar instância" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "Adicionar escravo" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "Adicionar tarefa" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "Adicionar variável" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "Adição" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "Blocos de função adicionais" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "Ajustar tamanho de bloco" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "Alinhamento" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "Tudo" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "Todos os ficheiros (*.*)|*.*|CSV files (*.csv)|*.csv" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "Já conectado. Por favor desconecte-se\n" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "Uma instância com o mesmo nome já existe!" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "" +"Aplicar modificação de nome para todas as continuações com o mesmo nome" + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "Arco coseno" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "Arco seno" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "Arco tangente" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "Aritmético" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "Array" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "Atribuição" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "Pelo menos uma variável ou expressão tem de ser seleccionada!" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "Autor" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "Nome de Autor (opcional)" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "Para trás" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "Mau tamanho de posição %s" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "Tipo base" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "Tipos base" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "Beremiz" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "Selecção binária (1 de 2)" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "Bit-shift" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "Bitwise" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "Bitwise AND" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "Bitwise OR" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "Bitwise XOR" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "Bitwise inverting" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "Bloco" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "Propriedades do bloco" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "Nome do bloco " + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "Fundo" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "Avariado" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "Explore a biblioteca de valores %s" + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "Navegar nos endereços" + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "Compilar" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "Directório de compilação já está limpo\n" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "Compilar projecto no ficheiro de compilação" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "A compilação C quebrou !\n" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "A compilação C falhou.\n" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "Codigo C" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "Codigo C gerado com sucesso.\n" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "A compilação C falhou.\n" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "A compilação C de %s falhou.\n" + +#: ../features.py:33 +msgid "C extension" +msgstr "Extensão C" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "C&redits" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "Rede CANOpen" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "Escravo CANOpen" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "Suporte CANOpen" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "Só pode gerar ordens de execução em redes FBD!" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "Só pode gerar um endereço para variáveis locais ou globais" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "Não é possivel gerar um programa no ficheiro %s !" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "" +"Não é possivel gerar um endereço para uma instância de bloco de função" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "Não é possivel salvar o projecto no ficheiro %s !" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "" +"Não é possivel atribuir um valor inicial a uma instância de bloco de função" + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "Não é possivel criar um elemento filho {a1} do tipo {a2} " + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "Nâo é possivel encontrar um canal IEC livre inferior a %d\n" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "Não é possivel obter o estado do PLC - falha de conexão.\n" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "Não é possível abrir / analisar VARIÁVEIS.csv!\n" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" +"Não é possível defenir o bit de offset para uma variavel não bool '{a1}' " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "Maiúsculas e minúsculas" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "Centrar" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "Alterar IP da interface a ligar" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "Alterar nome" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "Alterar tipo de Pou para" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "Alterar numero de porto" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "Alterar directoria de trabalho" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "Cadeia de caracteres" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "Escolha um ficheiro SVG" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "Escolha um directório para salvar projecto" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "Escolha um ficheiro" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "Escolha um projecto" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "Escalha um valor para %s :" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "Escolha um directório de trabalho" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "A pasta escolhida não contém um programa. Não é um projecto válido!" + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" +"A pasta escolhida não está vazia. Não pode ser usada para um novo projecto!" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "Classe" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "Filtro de Classe:" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "Classe:" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "Limpar" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "Limpar menssagens log" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "Limpar a pasta de compilação do projeto" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "Limpar o directório de compilação\n" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "limpar erros" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "limpar ordem de execução" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "Fechar" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "Fechar aplicação" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "Fechar projecto" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "Fechar aba" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "Bobine" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "Comentário" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "Suporte da comunidade" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "Nome da Empresa" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "Nome da Empresa (obrigatório):" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "URL da Empresa (opcional):" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "Comparação" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "A compilar programa ICE para codigo C...\n" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "Concatenação" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "Config" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "Config variáveis" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "Configuração" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "Configurações" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "Confirme ou altere o nome da variável" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "Conectar" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "Conectar ao PLC alvo" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "Conectar ao URI: %s" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "Conexão" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "Propriedades da conexão" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "Conexão cancelada!\n" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "Falha na conexão a %s !\n" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "Conexão perdida!\n" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "A conexão com %s falhou.\n" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "Conector" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "Conectores:" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "Consola" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "Constante" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "Contacto" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "descrição de conteúdo (opcional):" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "Continuação" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "Conversão de BCD" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "Conversão para BCD" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "Conversão para data" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "Conversão para hora-do-dia" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "Copiar" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "Copiar POU" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "Copiar o arquivo da pasta esquerda para a direita" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "Copiar o arquivo da pasta direita para a esquerda" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "Coseno" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" +"Não foi possível adicionar elemento filho \"{a1}\", tipo {a2}:\n" +" {a3} \n" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "Não foi possivél importar o ficheiro antigo %s." + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" +"Não foi possível carregar parâmetros base de confnode {a1} : \n" +" {a2}" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" +"Não foi possível carregar parâmetros de confnode {a1} : \n" +" {a2}" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "Não foi possível colar o objeto não-POU." + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "Não foi possível iniciar o PLC!\n" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "Não foi possível parar o PLC!\n" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "Criar HMI" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "Criar uma nova POU" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "Criar uma nova acção" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "Criar um novo bloco de ação" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "Criar um novo bloco" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "Criar uma nova ramificação" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "Criar uma nova bobine" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "Criar um novo comentário" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "Criar uma nova conexão" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "Criar um novo contacto" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "Criar uma nova divergência" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "Criar uma nova divergência ou convergência" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "Criar um novo passo inicial" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "Criar um novo salto" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "Criar um novo trilho de energia" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "Criar uma nova rung" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "Criar um novo passo" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "Criar uma nova transição" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "Criar uma nova variável" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "Creditos" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "Directoria de trabalho actual" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "Cortar" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "Cíclico" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "Descontinuada" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "Perfile DS-301" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "Perfile DS-302" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "Tipo de dado" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "Tipo de dados" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "Converção de tipo de dados" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "Adição de data" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "Subtração de data e hora" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "Subtração de data" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "Dias:" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" +"Depuração não corresponde ao PLC - parar / transferir / iniciar para " +"reativar\n" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "Depurar a instância" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "depuração %s" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "Depuração: Variável desconhecida '%s '\n" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "Depuração: Tipo não suportado para depurar ' %s '\n" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "Depurador" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "Depurador pronto\n" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "Eliminar" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "Eliminar ramificação de divergência" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "Eliminar ficheiro" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "Eliminar seguemento de fio" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "Eliminar item" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "Eliminação (dentro)" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "Tipo de Derivação:" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "Descrição" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "Descrição:" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "Dimensões:" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "Direcção" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "Direcção:" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "Diretamente" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "" + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" + +msgid "first input parameter" +msgstr "" + +msgid "second input parameter" +msgstr "" + +msgid "first output parameter" +msgstr "" + +msgid "second output parameter" +msgstr "" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_pt_BR.po --- a/i18n/Beremiz_pt_BR.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_pt_BR.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,6 +1,6 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. +# This file is distributed under the same license as the Beremiz package. # FIRST AUTHOR , YEAR. # #, fuzzy @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-09 15:28+0300\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Thiago Alves , 2017\n" +"Last-Translator: Rodrigo Rolle , 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/beremiz/teams/75746/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../PLCOpenEditor.py:408 ../Beremiz.py:1191 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -43,581 +43,586 @@ "\n" "Traceback:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr "Externo" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "InOut" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "Input" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr "Local" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "Output" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "Temp" -#: ../dialogs/PouTransitionDialog.py:99 ../dialogs/ProjectDialog.py:66 -#: ../dialogs/PouActionDialog.py:91 ../dialogs/PouDialog.py:113 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr "e %s" -#: ../ProjectController.py:1110 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "falha na geração !\n" -#: ../plcopen/plcopen.py:881 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "Data Type \"%s\" não existe !!!" -#: ../plcopen/plcopen.py:899 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "POU \"%s\" já existe !!!" -#: ../plcopen/plcopen.py:920 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "POU \"%s\" não existe !!!" -#: ../editors/Viewer.py:246 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" -msgstr "\"%s\" não pode ser usado para si mesmo!" - -#: ../IDEFrame.py:1651 ../IDEFrame.py:1670 +msgstr "\"%s\" não pode usar a si mesmo!" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "configuração \"%s\" já existe" -#: ../plcopen/plcopen.py:467 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" -msgstr "" - -#: ../IDEFrame.py:1601 +msgstr "Configuração \"%s\" já existe !!!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "Configuração \"%s\" não existe !!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:110 ../dialogs/BlockPreviewDialog.py:219 -#: ../dialogs/PouActionDialog.py:102 ../editors/Viewer.py:262 -#: ../editors/Viewer.py:330 ../editors/Viewer.py:354 ../editors/Viewer.py:374 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +msgstr "Data Type \"%s\" já existe!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" -msgstr "" - -#: ../Beremiz.py:994 +msgstr "Elemento \"%s\" para este POU já existe!" + +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:106 -#: ../dialogs/BlockPreviewDialog.py:207 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:98 ../dialogs/PouDialog.py:120 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:584 -#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:763 -#: ../IDEFrame.py:1592 +msgstr "A pasta \"%s\" não é um projeto Beremiz válido\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" -msgstr "" - -#: ../plcopen/plcopen.py:2412 +msgstr "\"%s\" é uma palavra-chave (keyword) e não pode ser usado!" + +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" -msgstr "" - -#: ../PLCOpenEditor.py:339 ../PLCOpenEditor.py:381 +msgstr "\"%s\" é um valor inválido!" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:104 -#: ../dialogs/BlockPreviewDialog.py:203 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:96 ../dialogs/PouDialog.py:118 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:579 ../editors/CodeFileEditor.py:768 -#: ../controls/VariablePanel.py:761 ../IDEFrame.py:1590 +msgstr "\"%s\" não é uma pasta válida!" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" -msgstr "" - -#: ../IDEFrame.py:2395 +msgstr "\"%s\" não é um identifier válido!" + +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" -msgstr "" - -#: ../dialogs/BlockPreviewDialog.py:211 ../dialogs/PouDialog.py:122 -#: ../editors/Viewer.py:260 ../editors/Viewer.py:315 ../editors/Viewer.py:345 -#: ../editors/Viewer.py:367 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1610 +msgstr "\"%s\" está sendo usado por um ou mais POUs. Você deseja continuar?" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:58 +msgstr "POU \"%s\" já existe!" + +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" -msgstr "" - -#: ../editors/DataTypeEditor.py:550 +msgstr "Passo \"%s\" já existe!" + +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:745 +msgstr "Valor \"%s\" já definido!" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:752 +msgstr "\"%s\" não é um valor válido para dimensão de vetores!" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" "Right value must be greater than left value." msgstr "" - -#: ../PLCGenerator.py:1101 +"\"%s\" não é um valor válido para dimensão de vetores!\n" +"O valor correto deve ser maior do que o valor da esquerda." + +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" -msgstr "" - -#: ../editors/Viewer.py:250 +msgstr "Função \"{a1}\" cancelada em POU \"{a2}\": Nenhuma entrada conectada" + +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" -msgstr "" - -#: ../plcopen/plcopen.py:491 +msgstr "\"{a1}\" já é usado por \"{a2}\"!" + +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" -msgstr "" - -#: ../plcopen/plcopen.py:509 +msgstr "Recurso \"{a1}\" já existe em configuração \"{a2}\" !!!" + +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +msgstr "Recurso \"{a1}\" não existe em configuração \"{a2}\" !!!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +msgstr "%03gms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +msgstr "%dd" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +msgstr "%dh" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +msgstr "%dm" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +msgstr "%dms" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" -msgstr "" - -#: ../PLCControler.py:1531 +msgstr "%ds" + +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" -msgstr "" - -#: ../PLCControler.py:1514 +msgstr "%s Data Types" + +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" -msgstr "" - -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +msgstr "%s POUs" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" -msgstr "" - -#: ../plcopen/plcopen.py:1645 ../plcopen/plcopen.py:1652 -#: ../plcopen/plcopen.py:1664 ../plcopen/plcopen.py:1672 -#: ../plcopen/plcopen.py:1682 +msgstr "%s Perfil" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" -msgstr "" - -#: ../plcopen/plcopen.py:1700 ../plcopen/plcopen.py:1707 -#: ../plcopen/plcopen.py:1714 +msgstr "%s não possui instâncias!" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" -msgstr "" - -#: ../IDEFrame.py:386 +msgstr "%s não possui texto!" + +#: ../IDEFrame.py:388 msgid "&Add Element" -msgstr "" - -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +msgstr "&Adicionar Elemento" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" -msgstr "" +msgstr "&Fechar" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "&Configuração" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "&Data Type" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "&Deletar" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "&Exibir" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "&Editar" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "&Arquivo" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "&Função" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "&Ajuda" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "&Licença" #: ../IDEFrame.py:356 -msgid "&Configuration" -msgstr "" - -#: ../IDEFrame.py:345 -msgid "&Data Type" -msgstr "" - -#: ../IDEFrame.py:390 -msgid "&Delete" -msgstr "" - -#: ../IDEFrame.py:337 -msgid "&Display" -msgstr "" - -#: ../IDEFrame.py:336 -msgid "&Edit" -msgstr "" - -#: ../IDEFrame.py:335 -msgid "&File" -msgstr "" - -#: ../IDEFrame.py:347 -msgid "&Function" -msgstr "" - -#: ../IDEFrame.py:338 -msgid "&Help" -msgstr "" - -#: ../dialogs/AboutDialog.py:72 -msgid "&License" -msgstr "" - -#: ../IDEFrame.py:351 msgid "&Program" -msgstr "" - -#: ../PLCOpenEditor.py:125 +msgstr "&Programa" + +#: ../PLCOpenEditor.py:98 msgid "&Properties" -msgstr "" - -#: ../Beremiz.py:324 +msgstr "&Propriedades" + +#: ../BeremizIDE.py:244 msgid "&Recent Projects" -msgstr "" - -#: ../IDEFrame.py:353 +msgstr "&Projetos Recentes" + +#: ../IDEFrame.py:358 msgid "&Resource" -msgstr "" - -#: ../controls/SearchResultPanel.py:239 +msgstr "&Recursos" + +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" -msgstr "" - -#: ../controls/SearchResultPanel.py:241 +msgstr "'{a1}' - {a2} correspondência no projeto" + +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" -msgstr "" - -#: ../connectors/PYRO/__init__.py:90 +msgstr "'{a1}' - {a2} correspondências no projeto" + +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" -msgstr "" - -#: ../controls/SearchResultPanel.py:291 +msgstr "'{a1}' está localizado em {a2}\n" + +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" -msgstr "" - -#: ../PLCOpenEditor.py:396 ../PLCOpenEditor.py:398 ../PLCOpenEditor.py:399 -msgid ", " -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/PouActionDialog.py:93 -#: ../dialogs/PouDialog.py:115 +msgstr "(%d correspondências)" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" -msgstr "" - -#: ../PLCOpenEditor.py:394 -msgid ". " -msgstr "" - -#: ../controls/LogViewer.py:279 +msgstr ", %s" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" -msgstr "" - -#: ../controls/LogViewer.py:280 +msgstr "1d" + +#: ../controls/LogViewer.py:288 msgid "1h" -msgstr "" - -#: ../controls/LogViewer.py:281 +msgstr "1h" + +#: ../controls/LogViewer.py:289 msgid "1m" -msgstr "" - -#: ../controls/LogViewer.py:282 +msgstr "1m" + +#: ../controls/LogViewer.py:290 msgid "1s" -msgstr "" - -#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1613 ../IDEFrame.py:1659 -#: ../IDEFrame.py:1678 +msgstr "1s" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " "to continue?" msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:108 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:100 -#: ../controls/VariablePanel.py:765 ../IDEFrame.py:1627 ../IDEFrame.py:1640 +"Um POU já tem um elemento chamado \"%s\". Isto pode causar um conflito. " +"Deseja continuar?" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" -msgstr "" +msgstr "Já existe POU chamado \"%s\"!" #: ../ConfigTreeNode.py:424 #, python-brace-format msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:216 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" -msgstr "" - -#: ../editors/ResourceEditor.py:451 +msgstr "Uma localização deve ser selecionada!" + +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:767 -#: ../IDEFrame.py:1629 ../IDEFrame.py:1642 +msgstr "Já existe uma tarefa com o mesmo nome!" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" -msgstr "" - -#: ../editors/CodeFileEditor.py:774 +msgstr "Já existe uma variável com nome \"%s\" neste POU!" + +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" -msgstr "" - -#: ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:158 ../Beremiz.py:381 +msgstr "Já existe uma variável com o nome \"%s\"!" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" -msgstr "" +msgstr "Sobre" #: ../plcopen/iec_std.csv:22 msgid "Absolute number" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/ActionBlockDialog.py:42 +msgstr "Número absoluto" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" -msgstr "" - -#: ../editors/Viewer.py:555 ../editors/Viewer.py:2356 +msgstr "Ação" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" -msgstr "" - -#: ../dialogs/PouActionDialog.py:81 +msgstr "Bloco de Ação" + +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" -msgstr "" - -#: ../dialogs/PouActionDialog.py:49 +msgstr "Nome de Ação" + +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" -msgstr "" - -#: ../plcopen/plcopen.py:1359 +msgstr "Nome de Ação:" + +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" -msgstr "" - -#: ../PLCControler.py:96 +msgstr "Não existe ação com o nome \"%s\"!" + +#: ../plcopen/types_enums.py:76 msgid "Actions" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:133 +msgstr "Ações" + +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" -msgstr "" - -#: ../editors/Viewer.py:1110 +msgstr "Ações:" + +#: ../editors/Viewer.py:473 msgid "Active" -msgstr "" - -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../editors/Viewer.py:588 ../Beremiz.py:1060 +msgstr "Ativo" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" -msgstr "" - -#: ../IDEFrame.py:1889 ../IDEFrame.py:1924 +msgstr "Adicionar" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" -msgstr "" - -#: ../features.py:32 +msgstr "Adicionar ação" + +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "" -#: ../IDEFrame.py:1872 +#: ../IDEFrame.py:1907 msgid "Add Configuration" -msgstr "" - -#: ../IDEFrame.py:1852 +msgstr "Adicionar Configuração" + +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "" -#: ../editors/Viewer.py:513 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "" -#: ../dialogs/DiscoveryDialog.py:116 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" -msgstr "" - -#: ../IDEFrame.py:1860 +msgstr "Adicionar IP" + +#: ../IDEFrame.py:1895 msgid "Add POU" -msgstr "" - -#: ../features.py:33 +msgstr "Adicionar POU" + +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "" -#: ../IDEFrame.py:1900 ../IDEFrame.py:1950 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" -msgstr "" - -#: ../IDEFrame.py:1878 ../IDEFrame.py:1921 +msgstr "Adicionar Recurso" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" -msgstr "" - -#: ../editors/Viewer.py:500 +msgstr "Adicionar Transição" + +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" -msgstr "" - -#: ../editors/SFCViewer.py:433 +msgstr "Adicionar Segmento de Fio" + +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" -msgstr "" - -#: ../editors/Viewer.py:2717 ../editors/SFCViewer.py:770 +msgstr "Adicionar um novo passo inicial" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" -msgstr "" - -#: ../editors/SFCViewer.py:455 +msgstr "Adicionar um novo salto" + +#: ../editors/SFCViewer.py:469 msgid "Add a new step" -msgstr "" - -#: ../features.py:34 +msgstr "Adicionar um novo passo" + +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:137 +msgstr "Adicionar uma GUI simples baseada em WxGlade" + +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" -msgstr "" - -#: ../editors/DataTypeEditor.py:352 +msgstr "Adicionar ação" + +#: ../editors/DataTypeEditor.py:364 msgid "Add element" -msgstr "" - -#: ../editors/ResourceEditor.py:268 +msgstr "Adicionar elemento" + +#: ../editors/ResourceEditor.py:283 msgid "Add instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:103 +msgstr "Adicionar instância" + +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" -msgstr "" - -#: ../editors/ResourceEditor.py:239 +msgstr "Adicionar escravo" + +#: ../editors/ResourceEditor.py:252 msgid "Add task" -msgstr "" - -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +msgstr "Adicionar tarefa" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" -msgstr "" +msgstr "Adicionar variável" #: ../plcopen/iec_std.csv:33 msgid "Addition" -msgstr "" - -#: ../plcopen/definitions.py:47 +msgstr "Adição" + +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" -msgstr "" - -#: ../editors/Viewer.py:571 +msgstr "Blocos de função adicionais" + +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" -msgstr "" - -#: ../editors/Viewer.py:1648 +msgstr "Ajustar Tamanho do Bloco" + +#: ../editors/Viewer.py:1720 msgid "Alignment" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:39 -#: ../dialogs/BrowseLocationsDialog.py:47 -#: ../dialogs/BrowseLocationsDialog.py:140 -#: ../dialogs/BrowseLocationsDialog.py:143 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +msgstr "Alinhamento" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" -msgstr "" - -#: ../editors/FileManagementPanel.py:35 +msgstr "Todos" + +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" -msgstr "" - -#: ../ProjectController.py:1644 +msgstr "Todos os arquivos (*.*)|*.*|arquivos CSV (*.csv)|*.csv" + +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:594 +msgstr "Já conectado. Por favor desconecte\n" + +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" -msgstr "" - -#: ../editors/ResourceEditor.py:486 +msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!" + +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:96 +msgstr "Já existe uma instância com o mesmo nome!" + +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "" #: ../plcopen/iec_std.csv:31 msgid "Arc cosine" -msgstr "" +msgstr "Arco cosseno" #: ../plcopen/iec_std.csv:30 msgid "Arc sine" -msgstr "" +msgstr "Arco seno" #: ../plcopen/iec_std.csv:32 msgid "Arc tangent" -msgstr "" +msgstr "Arco tangente" #: ../plcopen/iec_std.csv:33 msgid "Arithmetic" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:635 -#: ../controls/VariablePanel.py:841 +msgstr "Aritmética" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "" @@ -625,47 +630,39 @@ msgid "Assignment" msgstr "" -#: ../dialogs/FBDVariableDialog.py:217 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:99 +msgstr "Pelo menos uma variável ou expressão deve ser selecionada!" + +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:96 +msgstr "Autor" + +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:79 +msgstr "Nome do Autor (opcional):" + +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:55 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "" -#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:799 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "" -#: ../Beremiz.py:553 +#: ../BeremizIDE.py:483 msgid "Beremiz" -msgstr "" +msgstr "Beremiz" #: ../plcopen/iec_std.csv:70 msgid "Binary selection (1 of 2)" @@ -695,120 +692,120 @@ msgid "Bitwise inverting" msgstr "" -#: ../editors/Viewer.py:525 ../editors/Viewer.py:2369 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:59 +msgstr "Bloco" + +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" -msgstr "" - -#: ../editors/TextViewer.py:262 +msgstr "Propriedades do Bloco" + +#: ../editors/TextViewer.py:260 msgid "Block name" -msgstr "" - -#: ../editors/Viewer.py:491 +msgstr "Nome do Bloco" + +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "" -#: ../ProjectController.py:1322 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:37 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "" -#: ../ProjectController.py:1790 +#: ../ProjectController.py:1815 msgid "Build" msgstr "" -#: ../ProjectController.py:1256 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "" -#: ../ProjectController.py:1039 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "" -#: ../ProjectController.py:1036 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" -msgstr "" - -#: ../c_ext/CFileEditor.py:63 +msgstr "Construção em C falhou.\n" + +#: ../c_ext/CFileEditor.py:66 msgid "C code" -msgstr "" - -#: ../ProjectController.py:1114 +msgstr "Código C" + +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" -msgstr "" - -#: ../targets/toolchain_makefile.py:122 +msgstr "Código em C gerado com sucesso.\n" + +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" -msgstr "" - -#: ../targets/toolchain_gcc.py:156 +msgstr "Compilação em C falhou!\n" + +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" -msgstr "" - -#: ../features.py:32 +msgstr "Compilação em C de \"%s\" falhou.\n" + +#: ../features.py:33 msgid "C extension" -msgstr "" - -#: ../dialogs/AboutDialog.py:71 +msgstr "Extensão em C" + +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" -msgstr "" - -#: ../canfestival/SlaveEditor.py:44 +msgstr "Rede CANOpen" + +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" -msgstr "" +msgstr "Escravo CANOpen" #: ../features.py:31 msgid "CANopen support" -msgstr "" - -#: ../plcopen/plcopen.py:1584 ../plcopen/plcopen.py:1598 -#: ../plcopen/plcopen.py:1622 ../plcopen/plcopen.py:1638 +msgstr "Suporte CANOpen" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" -msgstr "" - -#: ../PLCOpenEditor.py:334 +msgstr "Só é possível atribuir localização para variáveis locais ou globais." + +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" -msgstr "" - -#: ../controls/VariablePanel.py:265 +msgstr "Não foi possível gerar programa para o arquivo \"%s\"!" + +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "" -#: ../PLCOpenEditor.py:379 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "" @@ -818,430 +815,444 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" -msgstr "" - -#: ../ProjectController.py:902 +msgstr "Impossível obter status do CLP - conexão falha.\n" + +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:88 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" +"Não é possível transferir enquanto o CLP está em execução. Deseja pará-lo " +"agora?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "" -#: ../editors/Viewer.py:486 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "" -#: ../Beremiz_service.py:266 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "" -#: ../Beremiz_service.py:265 +#: ../Beremiz_service.py:275 msgid "Change Name" -msgstr "" - -#: ../IDEFrame.py:1942 +msgstr "Mudar Nome" + +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:277 msgid "Change Port Number" -msgstr "" - -#: ../Beremiz_service.py:268 +msgstr "Mudar Número da Porta" + +#: ../Beremiz_service.py:278 msgid "Change working directory" -msgstr "" +msgstr "Mudar diretório de trabalho" #: ../plcopen/iec_std.csv:81 msgid "Character string" msgstr "" -#: ../svgui/svgui.py:125 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" -msgstr "" - -#: ../ProjectController.py:501 +msgstr "Escolha um arquivo SVG" + +#: ../ProjectController.py:561 msgid "Choose a directory to save project" -msgstr "" - -#: ../canfestival/canfestival.py:160 ../PLCOpenEditor.py:292 -#: ../PLCOpenEditor.py:324 ../PLCOpenEditor.py:373 +msgstr "Escolha um diretório para salvar o projeto" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" -msgstr "" - -#: ../Beremiz.py:931 ../Beremiz.py:966 +msgstr "Escolha um arquivo" + +#: ../BeremizIDE.py:900 msgid "Choose a project" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:42 +msgstr "Escolha um projeto" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" -msgstr "" - -#: ../Beremiz_service.py:323 +msgstr "Escolha um valor para \"%s\":" + +#: ../Beremiz_service.py:333 msgid "Choose a working directory " -msgstr "" - -#: ../ProjectController.py:408 +msgstr "Escolha um diretório de trabalho" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Escolha um diretório vazio para o novo projeto" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" - -#: ../ProjectController.py:375 +"O diretório escolhido não contém um programa. Não é um projeto válido!" + +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +"O diretório escolhido não está vazio. Você não pode usá-lo para um novo " +"projeto!" + +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:69 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "" -#: ../ProjectController.py:1794 +#: ../ProjectController.py:1821 msgid "Clean" -msgstr "" - -#: ../controls/LogViewer.py:318 +msgstr "Limpar" + +#: ../controls/LogViewer.py:327 msgid "Clean log messages" -msgstr "" - -#: ../ProjectController.py:1796 +msgstr "Limpar mensagens do log" + +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "" -#: ../ProjectController.py:1253 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" -msgstr "" - -#: ../editors/Viewer.py:582 +msgstr "Limpar Erros" + +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:105 ../dialogs/FindInPouDialog.py:111 +msgstr "Limpar Ordem de Execução" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" -msgstr "" - -#: ../PLCOpenEditor.py:199 ../Beremiz.py:693 +msgstr "Fechar" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" -msgstr "" - -#: ../PLCOpenEditor.py:108 ../Beremiz.py:333 ../Beremiz.py:637 -#: ../IDEFrame.py:1009 +msgstr "Fechar Aplicação" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" -msgstr "" - -#: ../PLCOpenEditor.py:106 ../Beremiz.py:331 +msgstr "Fechar Projeto" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" -msgstr "" - -#: ../editors/Viewer.py:541 ../editors/Viewer.py:2377 +msgstr "Fechar Aba" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" -msgstr "" - -#: ../editors/Viewer.py:561 ../editors/LDViewer.py:506 +msgstr "Bobina" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" -msgstr "" - -#: ../dialogs/ProjectDialog.py:57 +msgstr "Comentário" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "Suporte da Comunidade" + +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:94 +msgstr "Nome da Companhia" + +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:95 +msgstr "Nome da Companhia (obrigatório):" + +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" -msgstr "" +msgstr "URL da Companhia (opcional):" #: ../plcopen/iec_std.csv:75 msgid "Comparison" -msgstr "" - -#: ../ProjectController.py:693 +msgstr "Comparação" + +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" -msgstr "" +msgstr "Compilando programa IEC em código C...\n" #: ../plcopen/iec_std.csv:85 msgid "Concatenation" -msgstr "" - -#: ../editors/ConfTreeNodeEditor.py:229 +msgstr "Concatenação" + +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:39 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "" -#: ../editors/Viewer.py:307 ../editors/Viewer.py:337 ../editors/Viewer.py:359 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" -msgstr "" - -#: ../ProjectController.py:1809 +msgstr "Confirmar ou alterar nome de variável" + +#: ../ProjectController.py:1842 msgid "Connect" -msgstr "" - -#: ../ProjectController.py:1810 +msgstr "Conectar" + +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" -msgstr "" - -#: ../ProjectController.py:1313 +msgstr "Conectar ao CLP alvo" + +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:76 ../editors/Viewer.py:527 -#: ../editors/Viewer.py:2370 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:52 +msgstr "Conexão" + +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" -msgstr "" - -#: ../ProjectController.py:1668 +msgstr "Propriedades da Conexão" + +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" -msgstr "" - -#: ../ProjectController.py:1693 +msgstr "Conexão Cancelada!\n" + +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +msgstr "Conexão falha para \"%s\"!\n" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:102 +msgstr "Conexão perdida!\n" + +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1605 +msgstr "Conexão para '\"%s\"' falhou.\n" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:65 +msgstr "Conector" + +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" -msgstr "" - -#: ../Beremiz.py:448 +msgstr "Conectores:" + +#: ../BeremizIDE.py:378 msgid "Console" msgstr "" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" -msgstr "" - -#: ../editors/Viewer.py:537 ../editors/Viewer.py:2373 +msgstr "Constante" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:197 +msgstr "Contato" + +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" -msgstr "" - -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1606 +msgstr "Descrição do conteúdo (opcional):" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" -msgstr "" +msgstr "Continuação" #: ../plcopen/iec_std.csv:18 msgid "Conversion from BCD" -msgstr "" +msgstr "Conversão de BCD" #: ../plcopen/iec_std.csv:19 msgid "Conversion to BCD" -msgstr "" +msgstr "Conversão para BCD" #: ../plcopen/iec_std.csv:21 msgid "Conversion to date" -msgstr "" +msgstr "Conversão para data" #: ../plcopen/iec_std.csv:20 msgid "Conversion to time-of-day" -msgstr "" - -#: ../editors/Viewer.py:597 ../controls/LogViewer.py:693 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +msgstr "Conversão para hora-do-dia" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" -msgstr "" - -#: ../IDEFrame.py:1929 +msgstr "Copiar" + +#: ../IDEFrame.py:1964 msgid "Copy POU" -msgstr "" - -#: ../editors/FileManagementPanel.py:65 +msgstr "Copiar POU" + +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "" #: ../plcopen/iec_std.csv:28 msgid "Cosine" -msgstr "" - -#: ../ConfigTreeNode.py:656 +msgstr "Cosseno" + +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" "{a3}\n" msgstr "" -#: ../py_ext/PythonFileCTNMixin.py:77 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "" -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" " {a2}" msgstr "" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" " {a2}" msgstr "" -#: ../PLCControler.py:946 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "" -#: ../ProjectController.py:1610 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" -msgstr "" - -#: ../ProjectController.py:1618 +msgstr "Não foi possível iniciar o CLP!\n" + +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" -msgstr "" - -#: ../ProjectController.py:1582 -msgid "Couldn't stop debugger.\n" -msgstr "" - -#: ../svgui/svgui.py:47 +msgstr "Não foi possível parar o CLP!\n" + +#: ../svgui/svgui.py:57 msgid "Create HMI" -msgstr "" - -#: ../dialogs/PouDialog.py:45 +msgstr "Criar IHM" + +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" -msgstr "" - -#: ../dialogs/PouActionDialog.py:38 +msgstr "Criar um novo POU" + +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" -msgstr "" - -#: ../IDEFrame.py:159 +msgstr "Criar uma nova ação" + +#: ../IDEFrame.py:166 msgid "Create a new action block" -msgstr "" - -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +msgstr "Criar um novo bloco de ação" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" -msgstr "" - -#: ../IDEFrame.py:132 +msgstr "Criar um novo bloco" + +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" -msgstr "" - -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +msgstr "Criar uma nova bobina" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" -msgstr "" - -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +msgstr "Criar um novo comentário" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" -msgstr "" - -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +msgstr "Criar uma nova conexão" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" -msgstr "" - -#: ../IDEFrame.py:162 +msgstr "Criar um novo contato" + +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "" -#: ../dialogs/PouTransitionDialog.py:47 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" -msgstr "" - -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +msgstr "Criar uma nova transição" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" -msgstr "" - -#: ../dialogs/AboutDialog.py:113 +msgstr "Criar uma nova variável" + +#: ../dialogs/AboutDialog.py:109 msgid "Credits" -msgstr "" - -#: ../Beremiz_service.py:432 +msgstr "Créditos" + +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "" -#: ../editors/Viewer.py:596 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "" @@ -1253,19 +1264,19 @@ msgid "DEPRECATED" msgstr "" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:35 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "" -#: ../PLCControler.py:96 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "" @@ -1286,66 +1297,58 @@ msgid "Date subtraction" msgstr "" -#: ../dialogs/DurationEditorDialog.py:43 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "" -#: ../ProjectController.py:1715 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "" -#: ../editors/Viewer.py:1127 ../editors/Viewer.py:3664 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "" -#: ../ProjectController.py:1371 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "" -#: ../ProjectController.py:1369 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "" -#: ../ProjectController.py:1551 -msgid "Debugger disabled\n" -msgstr "" - -#: ../ProjectController.py:1712 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "" -#: ../ProjectController.py:1584 -msgid "Debugger stopped.\n" -msgstr "" - -#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1958 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "" -#: ../editors/Viewer.py:514 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "" -#: ../editors/Viewer.py:501 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "" @@ -1353,253 +1356,264 @@ msgid "Deletion (within)" msgstr "" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "" -#: ../controls/VariablePanel.py:432 +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "Descrição" + +#: ../controls/VariablePanel.py:463 msgid "Description:" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:61 ../editors/DataTypeEditor.py:321 +msgstr "Descrição:" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:68 +msgstr "Dimensões:" + +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:90 +msgstr "Direção" + +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Direção:" + +#: ../editors/DataTypeEditor.py:60 msgid "Directly" -msgstr "" - -#: ../ProjectController.py:1818 +msgstr "Diretamente" + +#: ../ProjectController.py:1855 msgid "Disconnect" -msgstr "" - -#: ../ProjectController.py:1820 +msgstr "Desconectar" + +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" -msgstr "" - -#: ../ProjectController.py:1323 +msgstr "Desconecte do CLP" + +#: ../ProjectController.py:1401 msgid "Disconnected" -msgstr "" - -#: ../editors/Viewer.py:556 ../editors/Viewer.py:2365 +msgstr "Desconectado" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "" #: ../plcopen/iec_std.csv:36 msgid "Division" -msgstr "" - -#: ../editors/FileManagementPanel.py:152 +msgstr "Divisão" + +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "Realmente deseja excluir o arquivo '%s'?" + +#: ../controls/VariablePanel.py:65 msgid "Documentation" -msgstr "" - -#: ../PLCOpenEditor.py:328 +msgstr "Documentaçã" + +#: ../PLCOpenEditor.py:312 msgid "Done" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:38 +msgstr "Feito" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" -msgstr "" - -#: ../canfestival/canfestival.py:163 +msgstr "Duração" + +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "" -#: ../editors/Viewer.py:570 +#: ../editors/Viewer.py:668 msgid "Edit Block" +msgstr "Editar Bloco" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" msgstr "" #: ../dialogs/LDElementDialog.py:56 -msgid "Edit Coil Values" -msgstr "" - -#: ../dialogs/LDElementDialog.py:54 msgid "Edit Contact Values" msgstr "" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "" -#: ../dialogs/SFCStepDialog.py:50 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:36 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "" -#: ../dialogs/ArrayTypeDialog.py:45 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "" -#: ../editors/Viewer.py:2586 ../editors/Viewer.py:3015 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" -msgstr "" - -#: ../editors/FileManagementPanel.py:66 +msgstr "Editar comentário" + +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" -msgstr "" - -#: ../controls/CustomEditableListBox.py:39 +msgstr "Editar arquivo" + +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" -msgstr "" - -#: ../editors/Viewer.py:2974 +msgstr "Editar item" + +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:51 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" -msgstr "" - -#: ../IDEFrame.py:611 +msgstr "Editar transição" + +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "" -#: ../ProjectController.py:1216 +#: ../ProjectController.py:1294 msgid "Editor selection" -msgstr "" - -#: ../editors/DataTypeEditor.py:348 +msgstr "Seleção de editor" + +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" -msgstr "" - -#: ../ProjectController.py:1321 +msgstr "Elementos:" + +#: ../ProjectController.py:1399 msgid "Empty" -msgstr "" - -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "" - -#: ../Beremiz_service.py:331 +msgstr "Vazio" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Dimensão vazia não é permitida." + +#: ../Beremiz_service.py:341 msgid "Enter a name " -msgstr "" - -#: ../Beremiz_service.py:316 +msgstr "Digite um nome" + +#: ../Beremiz_service.py:326 msgid "Enter a port number " -msgstr "" - -#: ../Beremiz_service.py:307 +msgstr "Digite um número de porta" + +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Digite o IP da interface para conectar" + +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" -msgstr "" +msgstr "Enumerado" #: ../plcopen/iec_std.csv:77 msgid "Equal to" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:179 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:163 -#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:236 -#: ../dialogs/ProjectDialog.py:71 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:216 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:134 -#: ../PLCOpenEditor.py:335 ../PLCOpenEditor.py:340 ../PLCOpenEditor.py:420 -#: ../PLCOpenEditor.py:430 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:423 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:579 ../editors/DataTypeEditor.py:584 -#: ../editors/DataTypeEditor.py:594 ../editors/DataTypeEditor.py:745 -#: ../editors/DataTypeEditor.py:752 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:783 ../ProjectController.py:343 -#: ../ProjectController.py:471 ../ProjectController.py:478 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:784 -#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1613 -#: ../IDEFrame.py:1654 ../IDEFrame.py:1659 ../IDEFrame.py:1673 -#: ../IDEFrame.py:1678 ../Beremiz_service.py:211 +msgstr "Igual a" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" -msgstr "" - -#: ../ProjectController.py:748 +msgstr "Erro" + +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "" -#: ../ProjectController.py:740 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" -msgstr "" - -#: ../ProjectController.py:671 +msgstr "Erro: compilador IEC para C retornou %d\n" + +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" "%s\n" msgstr "" - -#: ../ConfigTreeNode.py:216 +"Erro no gerador de código ST/IL/SFC: \n" +"%s\n" + +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" -msgstr "" - -#: ../canfestival/canfestival.py:168 +msgstr "Erro ao salvar \"%s\" \n" + +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" -msgstr "" - -#: ../canfestival/canfestival.py:369 +msgstr "Erro: falha na exportação de escravo.\n" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" -msgstr "" - -#: ../canfestival/canfestival.py:364 +msgstr "Erro: nenhum mestre gerado\n" + +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "" -#: ../ProjectController.py:1687 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:117 +msgstr "Exceção enquanto conectando a %s!\n" + +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:79 ../dialogs/FBDBlockDialog.py:105 +msgstr "Controle de Execução:" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" -msgstr "" - -#: ../features.py:35 +msgstr "Ordem de Execução:" + +#: ../features.py:36 msgid "Experimental web based HMI" -msgstr "" +msgstr "IHM experimental baseada em web" #: ../plcopen/iec_std.csv:38 msgid "Exponent" @@ -1607,1419 +1621,1470 @@ #: ../plcopen/iec_std.csv:26 msgid "Exponentiation" -msgstr "" - -#: ../canfestival/canfestival.py:174 +msgstr "Exponenciação" + +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +msgstr "Exportar escravo CANopen para arquivo EDS" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "" -#: ../canfestival/canfestival.py:173 +#: ../canfestival/canfestival.py:185 msgid "Export slave" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:89 +msgstr "Exportar escravo" + +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" -msgstr "" - -#: ../controls/VariablePanel.py:72 +msgstr "Expressão:" + +#: ../controls/VariablePanel.py:90 msgid "External" -msgstr "" - -#: ../ProjectController.py:761 +msgstr "Externo" + +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31 -#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143 +msgstr "Extraindo Variáveis Alocadas...\n" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" -msgstr "" - -#: ../ProjectController.py:1750 +msgstr "FBD" + +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:462 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" -msgstr "" - -#: ../ProjectController.py:1029 +msgstr "Borda de descida" + +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "" -#: ../Beremiz.py:118 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "" -#: ../dialogs/DurationEditorDialog.py:160 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:162 +msgstr "Campo %s não tem valor válido!" + +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" -msgstr "" - -#: ../controls/FolderTree.py:216 +msgstr "Campos %s não possuem valor válido!" + +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:100 ../dialogs/FindInPouDialog.py:36 -#: ../dialogs/FindInPouDialog.py:106 ../IDEFrame.py:375 +msgstr "Arquivo '%s' já existe!" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" -msgstr "" - -#: ../IDEFrame.py:377 +msgstr "Localizar" + +#: ../IDEFrame.py:379 msgid "Find Next" -msgstr "" - -#: ../IDEFrame.py:379 +msgstr "Localizar Próximo" + +#: ../IDEFrame.py:381 msgid "Find Previous" -msgstr "" +msgstr "Localizar Anterior" #: ../plcopen/iec_std.csv:90 msgid "Find position" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:57 +msgstr "Localizar posiçã" + +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "" - -#: ../editors/Viewer.py:1564 +msgstr "Localizar:" + +#: ../editors/Viewer.py:1633 msgid "Force value" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:162 +msgstr "Forçar valor" + +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:179 ../dialogs/PouTransitionDialog.py:102 -#: ../dialogs/ProjectDialog.py:70 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +msgstr "Forçando valor de variável" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:144 ../dialogs/FBDBlockDialog.py:232 -#: ../dialogs/ConnectionDialog.py:160 +msgstr "O formulário não está completo. %s deve ser preenchido!" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:228 +msgstr "O formulário não está completo. O nome deve ser preenchido!" + +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "" - -#: ../dialogs/FindInPouDialog.py:74 +"O formulário não está completo. Deve ser selecionado um tipo de bloco " +"válido." + +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1745 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" -msgstr "" - -#: ../IDEFrame.py:349 +msgstr "Função" + +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1744 -#: ../IDEFrame.py:1937 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "" -#: ../controls/VariablePanel.py:837 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "" -#: ../PLCControler.py:95 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "" -#: ../editors/Viewer.py:248 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "" -#: ../PLCControler.py:2337 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "" -#: ../PLCControler.py:95 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "" -#: ../PLCOpenEditor.py:115 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" -msgstr "" - -#: ../ProjectController.py:662 +msgstr "Gerar Programa" + +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" -msgstr "" - -#: ../controls/VariablePanel.py:73 +msgstr "Gerando código do SoftPLC IEC-61131 ST/IL/SFC...\n" + +#: ../controls/VariablePanel.py:91 msgid "Global" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +msgstr "Global" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:173 +msgstr "Ir para valor atua" + +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "" #: ../plcopen/iec_std.csv:75 msgid "Greater than" -msgstr "" +msgstr "Maior que" #: ../plcopen/iec_std.csv:76 msgid "Greater than or equal to" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:134 +msgstr "Maior que ou igual a" + +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "" -#: ../runtime/NevowServer.py:181 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" -msgstr "" - -#: ../editors/FileManagementPanel.py:85 +msgstr "Altura:" + +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:150 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:44 +msgstr "Horizontal:" + +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" -msgstr "" - -#: ../dialogs/PouActionDialog.py:31 ../dialogs/PouDialog.py:36 +msgstr "Horas:" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:94 +msgstr "IL" + +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" -msgstr "" - -#: ../Beremiz_service.py:308 ../Beremiz_service.py:309 +msgstr "IP" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" -msgstr "" - -#: ../svgui/svgui.py:42 ../svgui/svgui.py:43 +msgstr "IP inválido!" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1591 -#: ../controls/VariablePanel.py:71 +msgstr "Importar SVG" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "" -#: ../editors/Viewer.py:1110 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" -msgstr "" - -#: ../controls/VariablePanel.py:276 +msgstr "Inativo" + +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../controls/VariablePanel.py:282 +msgstr "Tipos de dados incompatíveis entre \"{a1}\" e \"{a2}\"" + +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" -msgstr "" - -#: ../controls/VariablePanel.py:286 +msgstr "Tipo de dado incompatível entre \"1%s\" e \"BOOL\"" + +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:38 +msgstr "Tamanho de dado incompatível entre \"{a1}\" e \"{a2}\"" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" -msgstr "" - -#: ../editors/Viewer.py:552 +msgstr "Indicador" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "Inicial" + +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +msgstr "Valor Inicial" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" -msgstr "" - -#: ../svgui/svgui.py:46 +msgstr "Valor Inicial:" + +#: ../svgui/svgui.py:56 msgid "Inkscape" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:75 ../dialogs/ActionBlockDialog.py:42 +msgstr "Inkscape" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "" -#: ../dialogs/SFCStepDialog.py:70 ../dialogs/FBDVariableDialog.py:37 -#: ../dialogs/BrowseLocationsDialog.py:40 ../editors/Viewer.py:289 -#: ../editors/Viewer.py:1589 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:93 +msgstr "Entrada" + +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" -msgstr "" +msgstr "Entradas:" #: ../plcopen/iec_std.csv:87 msgid "Insertion (into)" -msgstr "" - -#: ../plcopen/plcopen.py:1691 +msgstr "Inserção (em)" + +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" -msgstr "" - -#: ../editors/ResourceEditor.py:264 +msgstr "Instância com ID %d não existe!" + +#: ../editors/ResourceEditor.py:279 msgid "Instances:" -msgstr "" - -#: ../controls/VariablePanel.py:70 +msgstr "Instâncias:" + +#: ../controls/VariablePanel.py:88 msgid "Interface" -msgstr "" - -#: ../editors/ResourceEditor.py:72 +msgstr "Interface" + +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Interromper" + +#: ../editors/ResourceEditor.py:76 msgid "Interval" -msgstr "" - -#: ../PLCControler.py:2325 +msgstr "Intervalo" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" +"URL inválido!\n" +"Por favor entre com um endereço URL correto." + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" -msgstr "" - -#: ../canfestival/config_utils.py:381 +msgstr "Elemento(s) do PLCOpen inválido(s)!" + +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "Tipo inválido \"{a1}\"-> {a2} != {a3} para localização \"{a4}\"" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +msgstr "Tipo inválido \"{a1}\"-> {a2} != {a3} para localização \"{a4}\"" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" -msgstr "" - -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +msgstr "Valor inválido \"%s\" para variável de depuração" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "" -#: ../editors/Viewer.py:233 ../editors/Viewer.py:236 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "" -#: ../dialogs/ForceVariableDialog.py:177 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:121 +msgstr "Valor inválido \"{a1}\" para variável \"{a2}\"" + +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." msgstr "" - -#: ../editors/Viewer.py:557 ../editors/Viewer.py:2354 +"Valor inválido.\n" +"Você deve inserir um valor numérico." + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "A conexão é segura?" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31 -#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143 +msgstr "Salto" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" -msgstr "" - -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +msgstr "LD" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "" -#: ../dialogs/PouTransitionDialog.py:91 ../dialogs/PouActionDialog.py:83 -#: ../dialogs/PouDialog.py:104 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:186 +msgstr "Idioma" + +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:65 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +msgstr "Idioma (opcional):" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" -msgstr "" - -#: ../ProjectController.py:1756 +msgstr "Idioma:" + +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" - -#: ../Beremiz_service.py:271 +"Última construção já idêntica com o alvo atual. Transferindo mesmo " +"assim...\n" + +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" -msgstr "" - -#: ../Beremiz_service.py:270 +msgstr "Iniciar Inspetor WX GUI " + +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "" -#: ../editors/Viewer.py:485 +#: ../editors/Viewer.py:580 msgid "Left" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:62 +msgstr "Esquerdo" + +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "" #: ../plcopen/iec_std.csv:81 msgid "Length of string" -msgstr "" +msgstr "Comprimento da \"string\"" #: ../plcopen/iec_std.csv:78 msgid "Less than" -msgstr "" +msgstr "Menos que" #: ../plcopen/iec_std.csv:79 msgid "Less than or equal to" -msgstr "" - -#: ../IDEFrame.py:631 +msgstr "Menor que ou igual a" + +#: ../IDEFrame.py:652 msgid "Library" -msgstr "" - -#: ../dialogs/AboutDialog.py:151 +msgstr "Biblioteca" + +#: ../dialogs/AboutDialog.py:145 msgid "License" -msgstr "" +msgstr "Licença" #: ../plcopen/iec_std.csv:73 msgid "Limitation" -msgstr "" - -#: ../targets/toolchain_gcc.py:166 +msgstr "Limitação" + +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:111 ../controls/VariablePanel.py:72 +msgstr "Linkando:\n" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" -msgstr "" - -#: ../canfestival/canfestival.py:346 +msgstr "Local" + +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "" -#: ../ProjectController.py:1662 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" -msgstr "" - -#: ../controls/VariablePanel.py:53 +msgstr "Falha na descoberta de serviço local!\n" + +#: ../controls/VariablePanel.py:62 msgid "Location" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:72 +msgstr "Localização" + +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" -msgstr "" +msgstr "Localizações disponíveis:" #: ../plcopen/iec_std.csv:25 msgid "Logarithm to base 10" -msgstr "" - -#: ../connectors/PYRO/__init__.py:94 +msgstr "Logaritmo para base 10" + +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" -msgstr "" +msgstr "Mapear Variável" #: ../features.py:31 msgid "Map located variables over CANopen" -msgstr "" - -#: ../canfestival/NetworkEditor.py:106 +msgstr "Mapear variáveis alocadas por CANopen" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "Mapear variáveis alocadas por Modbus" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" -msgstr "" - -#: ../ConfigTreeNode.py:539 +msgstr "Mestre" + +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" #: ../plcopen/iec_std.csv:71 msgid "Maximum" -msgstr "" - -#: ../editors/DataTypeEditor.py:239 +msgstr "Máximo" + +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:289 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +msgstr "Máximo:" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" -msgstr "" - -#: ../IDEFrame.py:599 +msgstr "Memória" + +#: ../IDEFrame.py:617 msgid "Menu ToolBar" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:48 +msgstr "Barra de ferramentas Menu" + +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" -msgstr "" - -#: ../editors/Viewer.py:490 +msgstr "Microssegundos:" + +#: ../editors/Viewer.py:585 msgid "Middle" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:47 +msgstr "Meio" + +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" -msgstr "" +msgstr "Milissegundos:" #: ../plcopen/iec_std.csv:72 msgid "Minimum" -msgstr "" - -#: ../editors/DataTypeEditor.py:226 +msgstr "Mínimo" + +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:45 +msgstr "Mínimo:" + +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:210 +msgstr "Minutos:" + +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" -msgstr "" - -#: ../dialogs/LDElementDialog.py:63 +msgstr "Miscelânea" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "Suporte Modbus" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" -msgstr "" - -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +msgstr "Modificador:" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "" - -#: ../dialogs/ActionBlockDialog.py:140 +"Mais de um conector encontrado correspondente a continuação \"{a1}\" no POU " +"\"{a2}\"" + +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:139 +msgstr "Mover ação para baixo" + +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" -msgstr "" - -#: ../controls/CustomEditableListBox.py:43 +msgstr "Mover ação para cima" + +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" -msgstr "" - -#: ../editors/DataTypeEditor.py:355 +msgstr "Mover para baixo" + +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" -msgstr "" - -#: ../editors/DataTypeEditor.py:354 +msgstr "Mover elemento para baixo" + +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" -msgstr "" - -#: ../editors/ResourceEditor.py:271 +msgstr "Mover elemento para cima" + +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" -msgstr "" - -#: ../editors/ResourceEditor.py:270 +msgstr "Mover instância para baixo" + +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" -msgstr "" - -#: ../editors/ResourceEditor.py:242 +msgstr "Mover instância para cima" + +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" -msgstr "" - -#: ../controls/CustomEditableListBox.py:42 +msgstr "Mover a visualização" + +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" -msgstr "" - -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +msgstr "Mover para cima" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" -msgstr "" - -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +msgstr "Mover variável para baixo" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" -msgstr "" +msgstr "Mover variável para cima" #: ../plcopen/iec_std.csv:74 msgid "Multiplexer (select 1 of N)" -msgstr "" +msgstr "Multiplexador (selecione 1 de N)" #: ../plcopen/iec_std.csv:34 msgid "Multiplication" -msgstr "" - -#: ../editors/FileManagementPanel.py:83 +msgstr "Multiplicação" + +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:92 +msgstr "Meu Computador:" + +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" -msgstr "" - -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +msgstr "NOME" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" -msgstr "" - -#: ../Beremiz_service.py:332 +msgstr "Nome" + +#: ../Beremiz_service.py:342 msgid "Name must not be null!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:56 ../dialogs/FBDBlockDialog.py:83 -#: ../dialogs/ConnectionDialog.py:75 +msgstr "Nome deve ser não-nulo!" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" -msgstr "" +msgstr "Nome:" #: ../plcopen/iec_std.csv:24 msgid "Natural logarithm" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:460 +msgstr "Logaritmo natural" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" -msgstr "" - -#: ../Beremiz_service.py:578 +msgstr "Negado" + +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:554 +msgstr "Falha no serviço Nevow Web." + +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" -msgstr "" - -#: ../PLCOpenEditor.py:102 ../PLCOpenEditor.py:144 ../Beremiz.py:321 -#: ../Beremiz.py:356 +msgstr "Falha na importação Nevow/Athena:" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" -msgstr "" - -#: ../controls/CustomEditableListBox.py:40 +msgstr "Novo" + +#: ../controls/CustomEditableListBox.py:43 msgid "New item" -msgstr "" - -#: ../editors/Viewer.py:459 +msgstr "Novo item" + +#: ../editors/Viewer.py:553 msgid "No Modifier" -msgstr "" - -#: ../ProjectController.py:1784 +msgstr "Sem Modificador" + +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" -msgstr "" - -#: ../PLCGenerator.py:1631 +msgstr "Sem CLP para transferir (a construção foi bem-sucedida?)\n" + +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." msgstr "" - -#: ../PLCGenerator.py:829 +"Sem documentação disponível.\n" +"Em breve." + +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" -msgstr "" - -#: ../PLCGenerator.py:1194 +msgstr "Nenhuma informação encontrada para o bloco \"%s\" " + +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "" - -#: ../controls/SearchResultPanel.py:169 +"Nenhuma variável de saída {a1} encontrada no bloco {a2} no POU {a3}. Conexão" +" deve estar interrompida" + +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." -msgstr "" - -#: ../svgui/svgui.py:131 +msgstr "Sem resultados de busca disponíveis." + +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" -msgstr "" - -#: ../canfestival/config_utils.py:639 +msgstr "Nenhum arquivo SVG: %s\n" + +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" -msgstr "" - -#: ../PLCGenerator.py:1629 +msgstr "Nenhum valor válido selecionado!" + +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" -msgstr "" - -#: ../canfestival/config_utils.py:355 +msgstr "Nenhuma variável definida no POU \"%s\"" + +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" -msgstr "" - -#: ../controls/VariablePanel.py:64 +msgstr "ID de nó inexistente: {a1} (variável {a2})" + +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 +msgstr "Não-Reter" + +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" -msgstr "" - -#: ../canfestival/config_utils.py:389 +msgstr "Normal" + +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" #: ../plcopen/iec_std.csv:80 msgid "Not equal to" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:89 +msgstr "Não igual a" + +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" -msgstr "" +msgstr "Número de sequências:" #: ../plcopen/iec_std.csv:22 msgid "Numerical" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:86 +msgstr "Numérico" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "" -#: ../PLCOpenEditor.py:104 ../PLCOpenEditor.py:145 ../Beremiz.py:323 -#: ../Beremiz.py:357 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" -msgstr "" - -#: ../svgui/svgui.py:140 +msgstr "Abrir" + +#: ../svgui/svgui.py:151 msgid "Open Inkscape" -msgstr "" - -#: ../version.py:66 +msgstr "Abrir Inkscape" + +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "" - -#: ../ProjectController.py:1836 +"Framework Open Source para automação, IDE implementada IEC 61131 com um " +"conjunto constantemente crescente de extensões e ambiente flexível para CLP." + +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:138 +msgstr "Abrir um explorador de arquivos para gerenciar arquivos de projeto" + +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +msgstr "Abrir wxGlade" + +#: ../controls/VariablePanel.py:64 msgid "Option" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:83 +msgstr "Opção" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:97 +msgstr "Opções" + +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" -msgstr "" - -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +msgstr "Organização (opcional):" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:289 -#: ../editors/Viewer.py:1590 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +msgstr "Outro Perfil" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" -msgstr "" - -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +msgstr "Saída" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" -msgstr "" - -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +msgstr "PDO Receber" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" -msgstr "" - -#: ../targets/toolchain_gcc.py:131 +msgstr "PDO Transmitir" + +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" -msgstr "" - -#: ../Beremiz.py:453 +msgstr "CLP:\n" + +#: ../BeremizIDE.py:383 msgid "PLC Log" -msgstr "" - -#: ../ProjectController.py:1013 +msgstr "Log do CLP:" + +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" -msgstr "" - -#: ../Beremiz_service.py:295 +msgstr "Falha na geração de código do CLP!\n" + +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." -msgstr "" - -#: ../Beremiz_service.py:302 +msgstr "O CLP está vazio ou já iniciado." + +#: ../Beremiz_service.py:312 msgid "PLC is not started." -msgstr "" - -#: ../PLCOpenEditor.py:196 ../PLCOpenEditor.py:309 +msgstr "O CLP não está iniciado." + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" "{a2}" msgstr "" - -#: ../PLCOpenEditor.py:292 ../PLCOpenEditor.py:373 +"Erro de sintaxe no CLP na linha {a1}:\n" +"{a2}" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" -msgstr "" - -#: ../PLCOpenEditor.py:152 ../PLCOpenEditor.py:209 +msgstr "Arquivos PLCOpen (*.xml)|*.xml|Todos os arquivos|*.*" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" -msgstr "" - -#: ../PLCOpenEditor.py:355 +msgstr "PLCOpenEditor" + +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" "Beremiz is an " msgstr "" - -#: ../dialogs/DiscoveryDialog.py:95 +"O PLCOpen Editor é parte do projeto Beremiz.\n" +"\n" +"Beremiz é um" + +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" -msgstr "" - -#: ../dialogs/PouDialog.py:100 +msgstr "PORTA" + +#: ../dialogs/PouDialog.py:109 msgid "POU Name" -msgstr "" - -#: ../dialogs/PouDialog.py:58 +msgstr "Nome do POU" + +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" -msgstr "" - -#: ../dialogs/PouDialog.py:102 +msgstr "Nome do POU:" + +#: ../dialogs/PouDialog.py:111 msgid "POU Type" -msgstr "" - -#: ../dialogs/PouDialog.py:65 +msgstr "Tipo do POU" + +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:45 +msgstr "Tipo do POU:" + +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:61 +msgstr "PYRO conectando à URI : %s\n" + +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" -msgstr "" - -#: ../PLCOpenEditor.py:118 ../Beremiz.py:336 +msgstr "PYRO utilizando certificados em '%s' \n" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:110 +msgstr "Configurar Página" + +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" -msgstr "" - -#: ../IDEFrame.py:2598 +msgstr "Tamanho da Página (opcional):" + +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:124 +msgstr "Página: %d" + +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "" -#: ../editors/Viewer.py:598 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" -msgstr "" - -#: ../IDEFrame.py:1864 +msgstr "Colar" + +#: ../IDEFrame.py:1899 msgid "Paste POU" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:56 +msgstr "Colar POU" + +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:73 +msgstr "Padrão para pesquisar:" + +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "" -#: ../editors/Viewer.py:2717 ../editors/Viewer.py:2974 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" -msgstr "" - -#: ../editors/TextViewer.py:262 +msgstr "Por favor escolha um alvo" + +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" -msgstr "" - -#: ../editors/Viewer.py:2587 ../editors/Viewer.py:3016 +msgstr "Por favor insira um nome para o bloco" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" -msgstr "" - -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +msgstr "Por favor insira texto de comentário" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "" -#: ../Beremiz_service.py:194 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:163 +msgstr "Por favor insira o texto" + +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" -msgstr "" - -#: ../Beremiz_service.py:317 +msgstr "Por favor insira um valor para a variável \"%s\":" + +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" -msgstr "" - -#: ../Beremiz_service.py:317 +msgstr "Número da porta deve ser 0 <= porta <= 65535!" + +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" -msgstr "" - -#: ../editors/Viewer.py:536 ../editors/Viewer.py:2378 +msgstr "Número da porta deve ser um inteiro!" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "" -#: ../dialogs/LDPowerRailDialog.py:50 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "" -#: ../PLCOpenEditor.py:120 ../Beremiz.py:338 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" -msgstr "" - -#: ../dialogs/BlockPreviewDialog.py:57 +msgstr "Previsualização" + +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" -msgstr "" - -#: ../PLCOpenEditor.py:122 ../PLCOpenEditor.py:148 ../Beremiz.py:340 -#: ../Beremiz.py:360 +msgstr "Previsualização:" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" -msgstr "" - -#: ../IDEFrame.py:1075 +msgstr "Imprimir" + +#: ../IDEFrame.py:1110 msgid "Print preview" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Visualizar impressão" + +#: ../editors/ResourceEditor.py:76 msgid "Priority" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:89 +msgstr "Prioridade" + +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" -msgstr "" - -#: ../runtime/PLCObject.py:370 +msgstr "Prioridade:" + +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" -msgstr "" - -#: ../dialogs/ProjectDialog.py:55 +msgstr "Problema ao inicializar o CLP: erro \"%d\"" + +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:80 +msgstr "Nome do Produto" + +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:82 +msgstr "Nome do Produto (obrigatório):" + +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" -msgstr "" - -#: ../dialogs/ProjectDialog.py:56 +msgstr "Lançamento do Produto (opcional):" + +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:81 +msgstr "Versão do Produto" + +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1743 -#: ../IDEFrame.py:1940 +msgstr "Versão do produto (obrigatório):" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" -msgstr "" - -#: ../PLCOpenEditor.py:337 +msgstr "Programa" + +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" -msgstr "" - -#: ../PLCControler.py:96 +msgstr "O programa foi gerado com sucesso!" + +#: ../plcopen/types_enums.py:76 msgid "Programs" -msgstr "" - -#: ../editors/Viewer.py:242 +msgstr "Programas" + +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:84 ../IDEFrame.py:584 +msgstr "Programas não podem ser usados por outros POUs!" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" -msgstr "" - -#: ../controls/SearchResultPanel.py:173 +msgstr "Projeto" + +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" -msgstr "" - -#: ../ProjectController.py:1835 +msgstr "Projeto '%s':" + +#: ../ProjectController.py:1878 msgid "Project Files" -msgstr "" - -#: ../dialogs/ProjectDialog.py:54 +msgstr "Arquivos de Projeto" + +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:78 +msgstr "Nome do Projeto" + +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:79 +msgstr "Nome do Projeto (obrigatório):" + +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" -msgstr "" - -#: ../PLCControler.py:3158 +msgstr "Versão do Produto (opcional):" + +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" msgstr "" - -#: ../dialogs/ProjectDialog.py:32 ../editors/ProjectNodeEditor.py:37 +"Erro de sintaxe no arquivo do projeto:\n" +"\n" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" -msgstr "" - -#: ../ConfigTreeNode.py:566 +msgstr "Propriedades do projeto" + +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "" - -#: ../dialogs/ConnectionDialog.py:94 +"Layout da árvore de projeto não compatível com confnode.xml {a1}!={a2}" + +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:77 msgid "Properties" -msgstr "" - -#: ../Beremiz_service.py:440 +msgstr "Propriedades" + +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" -msgstr "" - -#: ../connectors/PYRO/__init__.py:118 +msgstr "Publicando serviço na rede local" + +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" -msgstr "" - -#: ../Beremiz_service.py:427 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:426 +msgstr "Exceção do Pyro: %s \n" + +#: ../Beremiz_service.py:420 msgid "Pyro port :" -msgstr "" - -#: ../py_ext/PythonEditor.py:81 +msgstr "Porta do Pyro:" + +#: ../py_ext/PythonEditor.py:84 msgid "Python code" -msgstr "" - -#: ../features.py:33 +msgstr "Código Python" + +#: ../features.py:34 msgid "Python file" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:38 +msgstr "Arquivo Python" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "" -#: ../PLCOpenEditor.py:128 ../Beremiz.py:343 ../Beremiz_service.py:273 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +msgstr "Fechar" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" -msgstr "" - -#: ../ProjectController.py:1831 +msgstr "Faixa:" + +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "" -#: ../Beremiz.py:1143 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" -msgstr "" - -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +msgstr "Deseja realmente excluir o nó '%s'?" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:74 +msgstr "Refazer" + +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:106 ../IDEFrame.py:432 +msgstr "Referência" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:66 +msgstr "Atualizar" + +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:98 +msgstr "Expressão regular" + +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" -msgstr "" - -#: ../editors/Viewer.py:1567 +msgstr "Expressões regulares" + +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "" #: ../plcopen/iec_std.csv:37 msgid "Remainder (modulo)" -msgstr "" - -#: ../Beremiz.py:1144 +msgstr "Resto (módulo)" + +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" -msgstr "" - -#: ../IDEFrame.py:2404 +msgstr "Remover nó %s" + +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "" -#: ../IDEFrame.py:2409 +#: ../IDEFrame.py:2450 msgid "Remove Pou" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:138 +msgstr "Remover POU" + +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" -msgstr "" - -#: ../editors/DataTypeEditor.py:353 +msgstr "Remover ação" + +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" -msgstr "" - -#: ../editors/FileManagementPanel.py:63 +msgstr "Remover elemento" + +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:104 +msgstr "Remover instância" + +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" -msgstr "" - -#: ../editors/ResourceEditor.py:240 +msgstr "Remover escravo" + +#: ../editors/ResourceEditor.py:253 msgid "Remove task" -msgstr "" - -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +msgstr "Remover tarefa" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" -msgstr "" - -#: ../IDEFrame.py:1944 +msgstr "Remover variável" + +#: ../IDEFrame.py:1979 msgid "Rename" -msgstr "" - -#: ../editors/FileManagementPanel.py:181 +msgstr "Renomear" + +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" -msgstr "" - -#: ../editors/Viewer.py:502 +msgstr "Substituir arquivo" + +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" -msgstr "" +msgstr "Substituir Fio por conexões" #: ../plcopen/iec_std.csv:89 msgid "Replacement (within)" msgstr "" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" -msgstr "" - -#: ../editors/Viewer.py:583 +msgstr "Reiniciar" + +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" -msgstr "" - -#: ../IDEFrame.py:451 +msgstr "Reiniciar Ordem de Execução" + +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "" -#: ../PLCControler.py:97 ../Beremiz.py:1075 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" -msgstr "" - -#: ../controls/VariablePanel.py:62 +msgstr "Recursos" + +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "" -#: ../editors/Viewer.py:487 +#: ../editors/Viewer.py:582 msgid "Right" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:63 +msgstr "Direita" + +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:461 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" -msgstr "" +msgstr "Borda de Subida" #: ../plcopen/iec_std.csv:65 msgid "Rotate left" -msgstr "" +msgstr "Girar para a esquerda" #: ../plcopen/iec_std.csv:64 msgid "Rotate right" -msgstr "" +msgstr "Girar para a direita" #: ../plcopen/iec_std.csv:17 msgid "Rounding up/down" msgstr "" -#: ../ProjectController.py:1799 +#: ../ProjectController.py:1828 msgid "Run" -msgstr "" - -#: ../ProjectController.py:1058 +msgstr "Rodar" + +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" -#: ../ProjectController.py:1067 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" -msgstr "" - -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +msgstr "Cliente SDO" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" -msgstr "" - -#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143 +msgstr "Servidor SDO" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" -msgstr "" - -#: ../PLCGenerator.py:1392 +msgstr "SFC" + +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "" -#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31 -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" -msgstr "" - -#: ../PLCOpenEditor.py:324 +msgstr "ST" + +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "" -#: ../svgui/svgui.py:125 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" -msgstr "" - -#: ../PLCOpenEditor.py:111 ../PLCOpenEditor.py:146 ../Beremiz.py:327 -#: ../Beremiz.py:358 +msgstr "SVGUI" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" -msgstr "" - -#: ../PLCOpenEditor.py:113 ../PLCOpenEditor.py:147 ../Beremiz.py:359 +msgstr "Salvar" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." -msgstr "" - -#: ../Beremiz.py:329 +msgstr "Salvar Como..." + +#: ../BeremizIDE.py:249 msgid "Save as" -msgstr "" - -#: ../ProjectController.py:470 +msgstr "Salvar como" + +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:44 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +msgstr "Buscar" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:46 +msgstr "Buscar no Projeto" + +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" -msgstr "" - -#: ../IDEFrame.py:388 +msgstr "Segundos:" + +#: ../IDEFrame.py:390 msgid "Select All" -msgstr "" - -#: ../editors/Viewer.py:288 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +msgstr "Selecionar Tudo" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" -msgstr "" - -#: ../ProjectController.py:1216 +msgstr "Selecionar uma classe de variáveis:" + +#: ../ProjectController.py:1293 msgid "Select an editor:" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:276 +msgstr "Selecionar um editor:" + +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" -msgstr "" - -#: ../IDEFrame.py:607 +msgstr "Selecionar uma instância" + +#: ../IDEFrame.py:628 msgid "Select an object" -msgstr "" - -#: ../ProjectController.py:477 +msgstr "Selecionar um objeto" + +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" -msgstr "" +msgstr "A pasta selecionada já contém outro projeto. Sobrescrever?\n" #: ../plcopen/iec_std.csv:70 msgid "Selection" +msgstr "Seleção" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" msgstr "" #: ../dialogs/SFCDivergenceDialog.py:65 -msgid "Selection Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:64 msgid "Selection Divergence" msgstr "" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:85 +msgstr "Descoberta de Serviços" + +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" -msgstr "" - -#: ../dialogs/LDElementDialog.py:76 +msgstr "Serviços disponíveis:" + +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "" #: ../plcopen/iec_std.csv:62 msgid "Shift left" -msgstr "" +msgstr "Deslocar para a esquerda" #: ../plcopen/iec_std.csv:63 msgid "Shift right" -msgstr "" - -#: ../ProjectController.py:1825 +msgstr "Deslocar para a direita" + +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" -msgstr "" - -#: ../canfestival/canfestival.py:387 +msgstr "Mostrar código IEC gerado pelo PLCGenerator" + +#: ../canfestival/canfestival.py:407 msgid "Show Master" -msgstr "" - -#: ../canfestival/canfestival.py:388 +msgstr "Mostrar Mestre" + +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1862 msgid "Show code" +msgstr "Mostrar Código" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" msgstr "" #: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Simultaneous Divergence" msgstr "" #: ../plcopen/iec_std.csv:27 msgid "Sine" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Seno" + +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3028,255 +3093,279 @@ #: ../plcopen/iec_std.csv:23 msgid "Square root (base 2)" -msgstr "" - -#: ../plcopen/definitions.py:46 +msgstr "Raiz quadrada (base 2)" + +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" -msgstr "" - -#: ../ProjectController.py:1801 ../Beremiz_service.py:261 +msgstr "Blocos de função padrão" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" -msgstr "" - -#: ../ProjectController.py:1005 +msgstr "Iniciar CLP" + +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" -msgstr "" - -#: ../ProjectController.py:1319 +msgstr "Iniciar construção em %s\n" + +#: ../ProjectController.py:1397 msgid "Started" -msgstr "" - -#: ../ProjectController.py:1607 +msgstr "Iniciado" + +#: ../ProjectController.py:1633 msgid "Starting PLC\n" -msgstr "" - -#: ../Beremiz.py:463 +msgstr "Iniciando CLP\n" + +#: ../BeremizIDE.py:393 msgid "Status ToolBar" -msgstr "" - -#: ../editors/Viewer.py:553 ../editors/Viewer.py:2353 +msgstr "Barra de Status" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "" -#: ../ProjectController.py:1804 +#: ../ProjectController.py:1835 msgid "Stop" -msgstr "" - -#: ../Beremiz_service.py:262 +msgstr "Parar" + +#: ../Beremiz_service.py:272 msgid "Stop PLC" -msgstr "" - -#: ../ProjectController.py:1806 +msgstr "Parar PLC" + +#: ../ProjectController.py:1836 msgid "Stop Running PLC" -msgstr "" - -#: ../ProjectController.py:1320 +msgstr "Parar Execução do CLP" + +#: ../ProjectController.py:1398 msgid "Stopped" -msgstr "" - -#: ../ProjectController.py:1579 -msgid "Stopping debugger...\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Parado" + +#: ../editors/DataTypeEditor.py:60 msgid "Structure" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 +msgstr "Estrutura" + +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "" #: ../plcopen/iec_std.csv:35 msgid "Subtraction" -msgstr "" - -#: ../ProjectController.py:1044 +msgstr "Subtração" + +#: ../ProjectController.py:1113 msgid "Successfully built.\n" -msgstr "" - -#: ../IDEFrame.py:447 +msgstr "Construído com sucesso.\n" + +#: ../IDEFrame.py:449 msgid "Switch perspective" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:172 +msgstr "Alterar perspectiva" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "" #: ../plcopen/iec_std.csv:29 msgid "Tangent" -msgstr "" - -#: ../editors/ResourceEditor.py:83 +msgstr "Tangente" + +#: ../editors/ResourceEditor.py:97 msgid "Task" -msgstr "" - -#: ../editors/ResourceEditor.py:235 +msgstr "Tarefa" + +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" -msgstr "" - -#: ../controls/VariablePanel.py:73 +msgstr "Tarefas:" + +#: ../controls/VariablePanel.py:91 msgid "Temp" -msgstr "" - -#: ../editors/FileManagementPanel.py:180 +msgstr "Temporário" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" +"O melhor lugar para enviar perguntas sobre o Beremiz/PLCOpen Editor\n" +"é a lista de e=mails do projeto: beremiz-devel@lists.sourceforge.net\n" +"\n" +"Este é o canal de suporte principal da comunidade.\n" +"Para enviar é necessário estar inscrito na lista de e-mail.\n" +"\n" +"Você pode se inscrever na lista aqui: https://lists.sourceforge.net/lists/listinfo/beremiz-devel" + +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" - -#: ../editors/LDViewer.py:882 +"O arquivo '%s' já existe.\n" +"Deseja substituí-lo?" + +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" -msgstr "" - -#: ../Beremiz.py:640 ../IDEFrame.py:1011 +msgstr "O grupo do bloco deve ser coerente!" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" -msgstr "" - -#: ../IDEFrame.py:1654 ../IDEFrame.py:1673 +msgstr "Há mudanças, deseja salvá-la?" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "" - -#: ../IDEFrame.py:1098 +"Há um POU com o nome \"%s\". Isto pode causar um conflito. Deseja continuar?" + +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "" - -#: ../editors/LDViewer.py:891 +"Houve um problema na impressão.\n" +"A impressora está configurada corretamente?" + +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +msgstr "Esta opção ainda não está disponível!" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "" #: ../plcopen/iec_std.csv:40 msgid "Time" -msgstr "" +msgstr "Tempo" #: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 msgid "Time addition" -msgstr "" +msgstr "Adição de tempo" #: ../plcopen/iec_std.csv:86 msgid "Time concatenation" -msgstr "" +msgstr "Concatenação de tempo" #: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 msgid "Time division" -msgstr "" +msgstr "Divisão de tempo" #: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 msgid "Time multiplication" -msgstr "" +msgstr "Multiplicação de tempo" #: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 msgid "Time subtraction" -msgstr "" +msgstr "Subtração de tempo" #: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 msgid "Time-of-day addition" -msgstr "" +msgstr "Adição de hora-do-dia" #: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 #: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 msgid "Time-of-day subtraction" -msgstr "" - -#: ../editors/Viewer.py:489 +msgstr "Subtração de hora-do-dia" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "Inverter valor" + +#: ../editors/Viewer.py:584 msgid "Top" msgstr "" -#: ../ProjectController.py:1813 +#: ../ProjectController.py:1848 msgid "Transfer" -msgstr "" - -#: ../ProjectController.py:1815 +msgstr "Transferir" + +#: ../ProjectController.py:1849 msgid "Transfer PLC" -msgstr "" - -#: ../ProjectController.py:1779 +msgstr "Transferir CLP" + +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" -msgstr "" - -#: ../ProjectController.py:1781 +msgstr "Transferência completada com sucesso.\n" + +#: ../ProjectController.py:1805 msgid "Transfer failed\n" -msgstr "" - -#: ../editors/Viewer.py:554 ../editors/Viewer.py:2355 -#: ../editors/Viewer.py:2382 +msgstr "Falha na transferência.\n" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" -msgstr "" - -#: ../PLCGenerator.py:1518 +msgstr "Transição" + +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:89 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:58 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "" -#: ../plcopen/plcopen.py:1318 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "" -#: ../PLCControler.py:96 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" -msgstr "" - -#: ../editors/ResourceEditor.py:68 +msgstr "Traduzido por" + +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "" -#: ../Beremiz_service.py:476 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "" -#: ../dialogs/ActionBlockDialog.py:38 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:48 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "" @@ -3285,271 +3374,323 @@ msgid "Type conversion" msgstr "" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:57 -#: ../dialogs/LDPowerRailDialog.py:56 ../dialogs/BrowseLocationsDialog.py:99 -#: ../dialogs/FBDBlockDialog.py:65 ../dialogs/ConnectionDialog.py:58 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" -msgstr "" - -#: ../ProjectController.py:382 +msgstr "Desfazer" + +#: ../ProjectController.py:442 msgid "Unknown" -msgstr "" - -#: ../editors/Viewer.py:393 +msgstr "Desconhecido" + +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" -msgstr "" - -#: ../ProjectController.py:379 ../ProjectController.py:380 +msgstr "Variável desconhecida \"%s\" para este POU!" + +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" -msgstr "" - -#: ../PLCControler.py:636 +msgstr "Sem nome" + +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" -msgstr "" - -#: ../controls/VariablePanel.py:284 +msgstr "Sem nome %d" + +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" -msgstr "" - -#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:810 +msgstr "Tamanho de dado não reconhecido \"%s\"" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "" -#: ../PLCControler.py:95 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:38 +msgstr "POUs definidos pelo usuário" + +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:259 +msgstr "Valor" + +#: ../editors/DataTypeEditor.py:267 msgid "Values:" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:42 ../editors/Viewer.py:526 -#: ../editors/Viewer.py:2385 +msgstr "Valores:" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" -msgstr "" - -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +msgstr "Variável" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "" -#: ../dialogs/FBDVariableDialog.py:63 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" -msgstr "" - -#: ../editors/Viewer.py:288 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +msgstr "Propriedades da variável" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" -msgstr "" - -#: ../editors/Viewer.py:395 ../editors/TextViewer.py:387 +msgstr "Classe da variável" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" -msgstr "" - -#: ../dialogs/LDElementDialog.py:89 +msgstr "Variável não pertence a este POU!" + +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" -msgstr "" - -#: ../controls/VariablePanel.py:72 +msgstr "Variável:" + +#: ../controls/VariablePanel.py:90 msgid "Variables" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:151 +msgstr "Variáveis" + +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "" -#: ../Beremiz_service.py:586 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "Falha na conexão com cliente WAMP (%s) ... tentando novamente... " + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "Perda de conexão com cliente WAMP (%s)... tentando novamente..." + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "ID WAMP:" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "Cliente WAMP conectando a:" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "Conexão com cliente WAMP não estabelecida!" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " -msgstr "" - -#: ../connectors/WAMP/__init__.py:91 +msgstr "Falha na inicialização de cliente WAMP." + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "Configuração WAMP incompleta." + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "Configuração WAMP está faltando." + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" -msgstr "" - -#: ../connectors/WAMP/__init__.py:131 +msgstr "WAMP conectando a URL: %s\n" + +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" -msgstr "" - -#: ../connectors/WAMP/__init__.py:150 +msgstr "Timeout da conexão WAMP" + +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" -msgstr "" - -#: ../Beremiz_service.py:562 +msgstr "Falha na conexão WAMP para '%s'.\n" + +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:35 +msgstr "Falha na importação WAMP :" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "Erro de carregamento WAMP:" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "" -#: ../dialogs/PouDialog.py:128 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "" -#: ../ProjectController.py:666 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:119 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:93 +msgstr "Largura:" + +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" -msgstr "" - -#: ../features.py:34 +msgstr "Escrito por" + +#: ../features.py:35 msgid "WxGlade GUI" -msgstr "" - -#: ../svgui/svgui.py:139 +msgstr "GUI WxGlade" + +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:137 +"Você não possui permissão de escrita.\n" +"Abrir mesmo assim?" + +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" msgstr "" - -#: ../ProjectController.py:342 +"Você não tem permissão de escrita.\n" +"Abrir WxGlade mesmo assim?" + +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" msgstr "" - -#: ../editors/LDViewer.py:886 +"É necessária permissão para trabalhar no projeto.\n" +"Trabalhar numa cópia do projeto?" + +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:175 +msgstr "Você deve digitar um nome!" + +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" -msgstr "" - -#: ../IDEFrame.py:438 +msgstr "Você deve digitar um valor!" + +#: ../IDEFrame.py:440 msgid "Zoom" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:151 +msgstr "Zoom" + +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" -msgstr "" - -#: ../PLCOpenEditor.py:333 +msgstr "dias" + +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" -msgstr "" - -#: ../util/ProcessLogger.py:169 +msgstr "erro: %s\n" + +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "" -#: ../PLCOpenEditor.py:396 ../PLCOpenEditor.py:398 -msgid "file : " -msgstr "" - -#: ../dialogs/PouDialog.py:31 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "" -#: ../PLCOpenEditor.py:399 -msgid "function : " -msgstr "" - -#: ../dialogs/PouDialog.py:31 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "" -#: ../dialogs/DurationEditorDialog.py:151 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" -msgstr "" - -#: ../PLCOpenEditor.py:399 -msgid "line : " -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:153 +msgstr "horas" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "instalação do matiec não encontrada\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:152 +msgstr "milissegundos" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" -msgstr "" - -#: ../dialogs/PouDialog.py:31 +msgstr "minutos" + +#: ../dialogs/PouDialog.py:36 msgid "program" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:152 +msgstr "programa" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" -msgstr "" +msgstr "segundos" #: ../plcopen/iec_std.csv:84 msgid "string from the middle" @@ -3563,24 +3704,24 @@ msgid "string right of" msgstr "" -#: ../Beremiz.py:126 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "" -#: ../PLCOpenEditor.py:331 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "" -#: ../PLCControler.py:970 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "" -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" @@ -3628,7 +3769,7 @@ msgstr "" msgid "Compiler" -msgstr "" +msgstr "Compilador" msgid "CFLAGS" msgstr "" @@ -3639,13 +3780,76 @@ msgid "LDFLAGS" msgstr "" -msgid "PLC" -msgstr "" - msgid "Linux" -msgstr "" +msgstr "Linux" msgid "Win32" +msgstr "Win32" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "Paridade" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" msgstr "" msgid "BaseParams" @@ -3664,7 +3868,7 @@ msgstr "" msgid "Libraries" -msgstr "" +msgstr "Bibliotecas" msgid "URI_location" msgstr "" @@ -3676,22 +3880,22 @@ msgstr "" msgid "variables" -msgstr "" +msgstr "variáveis" msgid "variable" -msgstr "" +msgstr "variável" msgid "name" -msgstr "" +msgstr "nome" msgid "type" -msgstr "" +msgstr "tipo" msgid "class" -msgstr "" +msgstr "classe" msgid "initial" -msgstr "" +msgstr "inicia" msgid "desc" msgstr "" @@ -3760,7 +3964,7 @@ msgstr "" msgid "0 - manual , 1 - automatic" -msgstr "" +msgstr "0 - manual, 1 - automático" msgid "Process variable" msgstr "" @@ -3822,7 +4026,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" msgid "The output produces a single pulse when a rising edge is detected." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_pt_PT.po --- a/i18n/Beremiz_pt_PT.po Thu Nov 22 23:39:54 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3916 +0,0 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER -# This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. -# -# Translators: -# Pedro Coimbra , 2017 -msgid "" -msgstr "" -"Project-Id-Version: Beremiz\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Pedro Coimbra , 2017\n" -"Language-Team: Portuguese (https://www.transifex.com/beremiz/teams/75746/pt/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 -#, python-format -msgid "" -"\n" -"An unhandled exception (bug) occured. Bug report saved at :\n" -"(%s)\n" -"\n" -"Please be kind enough to send this file to:\n" -"beremiz-devel@lists.sourceforge.net\n" -"\n" -"You should now restart program.\n" -"\n" -"Traceback:\n" -msgstr "" - -#: ../controls/VariablePanel.py:72 -msgid " External" -msgstr "Externo" - -#: ../controls/VariablePanel.py:71 -msgid " InOut" -msgstr "EntradaSaída" - -#: ../controls/VariablePanel.py:71 -msgid " Input" -msgstr "Entrada" - -#: ../controls/VariablePanel.py:72 -msgid " Local" -msgstr "Local" - -#: ../controls/VariablePanel.py:71 -msgid " Output" -msgstr "Saída" - -#: ../controls/VariablePanel.py:73 -msgid " Temp" -msgstr "Temp" - -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 -#, python-format -msgid " and %s" -msgstr "e %s" - -#: ../ProjectController.py:1151 -msgid " generation failed !\n" -msgstr "geração falhada !\n" - -#: ../plcopen/plcopen.py:886 -#, python-format -msgid "\"%s\" Data Type doesn't exist !!!" -msgstr "\" %s \" O tipo de dados não existe !!!" - -#: ../plcopen/plcopen.py:904 -#, python-format -msgid "\"%s\" POU already exists !!!" -msgstr "\" %s \" POU já existe !!!" - -#: ../plcopen/plcopen.py:925 -#, python-format -msgid "\"%s\" POU doesn't exist !!!" -msgstr "\" %s \" POU não existe !!!" - -#: ../editors/Viewer.py:247 -#, python-format -msgid "\"%s\" can't use itself!" -msgstr "\"%s\" não pode usar-se!" - -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 -#, python-format -msgid "\"%s\" config already exists!" -msgstr "\"%s \" config já existe!" - -#: ../plcopen/plcopen.py:472 -#, python-format -msgid "\"%s\" configuration already exists !!!" -msgstr "\"%s\" configuração já existe !!!" - -#: ../IDEFrame.py:1605 -#, python-format -msgid "\"%s\" data type already exists!" -msgstr "\"%s\" o tipo de dados já existe!" - -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 -#, python-format -msgid "\"%s\" element for this pou already exists!" -msgstr "\"%s\" o elemento para esta pou já existe!" - -#: ../BeremizIDE.py:897 -#, python-format -msgid "\"%s\" folder is not a valid Beremiz project\n" -msgstr "\"%s\" o ficheiro não é um projecto Beremiz válido\n" - -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 -#, python-format -msgid "\"%s\" is a keyword. It can't be used!" -msgstr "\"%s\" é uma palavra-chave. Não pode ser usada!" - -#: ../plcopen/plcopen.py:2417 -#, python-format -msgid "\"%s\" is an invalid value!" -msgstr "\"%s\" é um valor inválido!" - -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 -#, python-format -msgid "\"%s\" is not a valid folder!" -msgstr "\"%s\" não é um ficheiro válido!" - -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 -#, python-format -msgid "\"%s\" is not a valid identifier!" -msgstr "\"%s\" não é um identificador válido!" - -#: ../IDEFrame.py:2410 -#, python-format -msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" -msgstr "\"%s\" é usáda por uma ou mais POUs. Deseja continuar?" - -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 -#, python-format -msgid "\"%s\" pou already exists!" -msgstr "\"%s\" pou já existe!" - -#: ../dialogs/SFCStepNameDialog.py:58 -#, python-format -msgid "\"%s\" step already exists!" -msgstr "\"%s\" o passo já existe!" - -#: ../editors/DataTypeEditor.py:550 -#, python-format -msgid "\"%s\" value already defined!" -msgstr "\"%s\" valor já defenido|" - -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 -#, python-format -msgid "\"%s\" value isn't a valid array dimension!" -msgstr "\"%s\" o valor não é uma dimensão de matriz válida!" - -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 -#, python-format -msgid "" -"\"%s\" value isn't a valid array dimension!\n" -"Right value must be greater than left value." -msgstr "" -"\"%s\" o valor não é uma dimensão de matriz válida!\n" -"O valor direito tem de ser maior do que o valor esquerdo." - -#: ../PLCGenerator.py:1101 -#, python-brace-format -msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" -msgstr "\"{a1}\" função cancelada na POU \"{a2}\" : Sem entrada conectada" - -#: ../editors/Viewer.py:251 -#, python-brace-format -msgid "\"{a1}\" is already used by \"{a2}\"!" -msgstr "\"{a1}\" já está a ser usada por \"{a2}\"!" - -#: ../plcopen/plcopen.py:496 -#, python-brace-format -msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" -msgstr "o recurso\"{a1}\" já existe na configuração\"{a2}\" !!!" - -#: ../plcopen/plcopen.py:514 -#, python-brace-format -msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" -msgstr "o recurso\"{a1}\" não existe na configuração\"{a2}\" !!!" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 -#, python-format -msgid "%03gms" -msgstr "%03gms" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 -#, python-format -msgid "%dd" -msgstr "%dd" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 -#, python-format -msgid "%dh" -msgstr "%dh" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 -#, python-format -msgid "%dm" -msgstr "%dm" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 -#, python-format -msgid "%dms" -msgstr "%dms" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 -#, python-format -msgid "%ds" -msgstr "%ds" - -#: ../PLCControler.py:1533 -#, python-format -msgid "%s Data Types" -msgstr "%s Tipo de dados" - -#: ../PLCControler.py:1516 -#, python-format -msgid "%s POUs" -msgstr "%s POUs" - -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 -#, python-format -msgid "%s Profile" -msgstr "%s Perfil" - -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 -#, python-format -msgid "%s body don't have instances!" -msgstr "%s o corpo não tem instâncias!" - -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 -#, python-format -msgid "%s body don't have text!" -msgstr "%s o corpo não tem texto!" - -#: ../IDEFrame.py:386 -msgid "&Add Element" -msgstr "&Adicione elemento" - -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 -msgid "&Close" -msgstr "&Fechar" - -#: ../IDEFrame.py:356 -msgid "&Configuration" -msgstr "&Configuração" - -#: ../IDEFrame.py:345 -msgid "&Data Type" -msgstr "&Tipo de dados" - -#: ../IDEFrame.py:390 -msgid "&Delete" -msgstr "&Apagar" - -#: ../IDEFrame.py:337 -msgid "&Display" -msgstr "&Exibir" - -#: ../IDEFrame.py:336 -msgid "&Edit" -msgstr "&Editar" - -#: ../IDEFrame.py:335 -msgid "&File" -msgstr "&Ficheiro" - -#: ../IDEFrame.py:347 -msgid "&Function" -msgstr "&Função" - -#: ../IDEFrame.py:338 -msgid "&Help" -msgstr "&Ajuda" - -#: ../dialogs/AboutDialog.py:72 -msgid "&License" -msgstr "&Licensa" - -#: ../IDEFrame.py:351 -msgid "&Program" -msgstr "&Programa" - -#: ../PLCOpenEditor.py:127 -msgid "&Properties" -msgstr "&Propriedades" - -#: ../BeremizIDE.py:219 -msgid "&Recent Projects" -msgstr "&Projectos recentes" - -#: ../IDEFrame.py:353 -msgid "&Resource" -msgstr "&Recurso" - -#: ../controls/SearchResultPanel.py:239 -#, python-brace-format -msgid "'{a1}' - {a2} match in project" -msgstr "'{a1}' - {a2} é idêntico no projecto" - -#: ../controls/SearchResultPanel.py:241 -#, python-brace-format -msgid "'{a1}' - {a2} matches in project" -msgstr "'{a1}' - {a2} são idênticos no projecto" - -#: ../connectors/PYRO/__init__.py:90 -#, python-brace-format -msgid "'{a1}' is located at {a2}\n" -msgstr "'{a1}' está localizado em {a2}\n" - -#: ../controls/SearchResultPanel.py:291 -#, python-format -msgid "(%d matches)" -msgstr "(%d corresponde)" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr "," - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 -#, python-format -msgid ", %s" -msgstr ", %s" - -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr "." - -#: ../controls/LogViewer.py:279 -msgid "1d" -msgstr "1d" - -#: ../controls/LogViewer.py:280 -msgid "1h" -msgstr "1h" - -#: ../controls/LogViewer.py:281 -msgid "1m" -msgstr "1m" - -#: ../controls/LogViewer.py:282 -msgid "1s" -msgstr "1s" - -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 -#, python-format -msgid "" -"A POU has an element named \"%s\". This could cause a conflict. Do you wish " -"to continue?" -msgstr "" -"Uma POU contém um elemento chamado \"%s\" Isto pode causar um conflito. " -"Deseja continuar?" - -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 -#, python-format -msgid "A POU named \"%s\" already exists!" -msgstr "Uma POU chmada \"%s\" já existe!" - -#: ../ConfigTreeNode.py:424 -#, python-brace-format -msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" -msgstr "Um filho chamado \"{a1}\" ajá existe -> \"{a2}\"\n" - -#: ../dialogs/BrowseLocationsDialog.py:218 -msgid "A location must be selected!" -msgstr "Uma localização tem de ser seleccionada!" - -#: ../editors/ResourceEditor.py:451 -msgid "A task with the same name already exists!" -msgstr "Uma tarefa com o mesmo nome já existe!" - -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 -#, python-format -msgid "A variable with \"%s\" as name already exists in this pou!" -msgstr "Uma variavel com o nome\"%s\" já existe nesta pou!" - -#: ../editors/CodeFileEditor.py:780 -#, python-format -msgid "A variable with \"%s\" as name already exists!" -msgstr "Uma variavel com o nome\"%s\" já existe!" - -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 -msgid "About" -msgstr "Sobre" - -#: ../plcopen/iec_std.csv:22 -msgid "Absolute number" -msgstr "Numero absoluto" - -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 -msgid "Action" -msgstr "Acção" - -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 -msgid "Action Block" -msgstr "Bloco de acção" - -#: ../dialogs/PouActionDialog.py:82 -msgid "Action Name" -msgstr "Nome da acção" - -#: ../dialogs/PouActionDialog.py:49 -msgid "Action Name:" -msgstr "Nome da acção:" - -#: ../plcopen/plcopen.py:1364 -#, python-format -msgid "Action with name %s doesn't exist!" -msgstr "A acção com o nome \"%s\" não existe!" - -#: ../PLCControler.py:98 -msgid "Actions" -msgstr "Acções" - -#: ../dialogs/ActionBlockDialog.py:133 -msgid "Actions:" -msgstr "Acções:" - -#: ../editors/Viewer.py:431 -msgid "Active" -msgstr "Activo" - -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 -msgid "Add" -msgstr "Adicionar" - -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 -msgid "Add Action" -msgstr "Adicionar acção" - -#: ../features.py:32 -msgid "Add C code accessing located variables synchronously" -msgstr "Adicionar codigo C acessando variaveis localizadas sincronamente" - -#: ../IDEFrame.py:1876 -msgid "Add Configuration" -msgstr "Adicionar Configuração" - -#: ../IDEFrame.py:1856 -msgid "Add DataType" -msgstr "Adicionar um Tipo de Dados" - -#: ../editors/Viewer.py:572 -msgid "Add Divergence Branch" -msgstr "Adicionar um Ramo de divergência" - -#: ../dialogs/DiscoveryDialog.py:117 -msgid "Add IP" -msgstr "Adicionar IP" - -#: ../IDEFrame.py:1864 -msgid "Add POU" -msgstr "Adicionao POU" - -#: ../features.py:33 -msgid "Add Python code executed asynchronously" -msgstr "Adicionar codigo Python executado assincronamente" - -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 -msgid "Add Resource" -msgstr "Adicionar Recurso" - -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 -msgid "Add Transition" -msgstr "Adicionar Transição" - -#: ../editors/Viewer.py:559 -msgid "Add Wire Segment" -msgstr "Adicionar seguemento de ligação" - -#: ../editors/SFCViewer.py:433 -msgid "Add a new initial step" -msgstr "Adicionar um novo passo de inicio" - -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 -msgid "Add a new jump" -msgstr "Adicionar um novo salto" - -#: ../editors/SFCViewer.py:455 -msgid "Add a new step" -msgstr "Adicionar um novo passo" - -#: ../features.py:34 -msgid "Add a simple WxGlade based GUI." -msgstr "Adicionar um simples GUI baseado em WxGlade" - -#: ../dialogs/ActionBlockDialog.py:137 -msgid "Add action" -msgstr "Adicionar acção" - -#: ../editors/DataTypeEditor.py:352 -msgid "Add element" -msgstr "Adicionar elemento" - -#: ../editors/ResourceEditor.py:268 -msgid "Add instance" -msgstr "Adicionar instância" - -#: ../canfestival/NetworkEditor.py:103 -msgid "Add slave" -msgstr "Adicionar escravo" - -#: ../editors/ResourceEditor.py:239 -msgid "Add task" -msgstr "Adicionar tarefa" - -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 -msgid "Add variable" -msgstr "Adicionar variável" - -#: ../plcopen/iec_std.csv:33 -msgid "Addition" -msgstr "Adição" - -#: ../plcopen/definitions.py:49 -msgid "Additional function blocks" -msgstr "Blocos de função adicionais" - -#: ../editors/Viewer.py:630 -msgid "Adjust Block Size" -msgstr "Ajustar tamanho de bloco" - -#: ../editors/Viewer.py:1686 -msgid "Alignment" -msgstr "Alinhamento" - -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 -msgid "All" -msgstr "Tudo" - -#: ../editors/FileManagementPanel.py:35 -msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" -msgstr "Todos os ficheiros (*.*)|*.*|CSV files (*.csv)|*.csv" - -#: ../ProjectController.py:1685 -msgid "Already connected. Please disconnect\n" -msgstr "Já conectado. Por favor desconecte-se\n" - -#: ../editors/DataTypeEditor.py:591 -#, python-format -msgid "An element named \"%s\" already exists in this structure!" -msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!" - -#: ../editors/ResourceEditor.py:486 -msgid "An instance with the same name already exists!" -msgstr "Uma instância com o mesmo nome já existe!" - -#: ../dialogs/ConnectionDialog.py:100 -msgid "Apply name modification to all continuations with the same name" -msgstr "" -"Aplicar modificação de nome para todas as continuações com o mesmo nome" - -#: ../plcopen/iec_std.csv:31 -msgid "Arc cosine" -msgstr "Arco coseno" - -#: ../plcopen/iec_std.csv:30 -msgid "Arc sine" -msgstr "Arco seno" - -#: ../plcopen/iec_std.csv:32 -msgid "Arc tangent" -msgstr "Arco tangente" - -#: ../plcopen/iec_std.csv:33 -msgid "Arithmetic" -msgstr "Aritmético" - -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 -msgid "Array" -msgstr "Array" - -#: ../plcopen/iec_std.csv:39 -msgid "Assignment" -msgstr "Atribuição" - -#: ../dialogs/FBDVariableDialog.py:222 -msgid "At least a variable or an expression must be selected!" -msgstr "Pelo menos uma variável ou expressão tem de ser seleccionada!" - -#: ../controls/ProjectPropertiesPanel.py:100 -msgid "Author" -msgstr "Autor" - -#: ../controls/ProjectPropertiesPanel.py:97 -msgid "Author Name (optional):" -msgstr "Nome de Autor (opcional)" - -#: ../dialogs/FindInPouDialog.py:77 -msgid "Backward" -msgstr "Para trás" - -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Mau nome de domínio (circular) em" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Mau nome de domínio em" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 -#, python-format -msgid "Bad location size : %s" -msgstr "Mau tamanho de posição %s" - -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 -msgid "Base Type:" -msgstr "Tipo base" - -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 -msgid "Base Types" -msgstr "Tipos base" - -#: ../BeremizIDE.py:455 -msgid "Beremiz" -msgstr "Beremiz" - -#: ../plcopen/iec_std.csv:70 -msgid "Binary selection (1 of 2)" -msgstr "Selecção binária (1 de 2)" - -#: ../plcopen/iec_std.csv:62 -msgid "Bit-shift" -msgstr "Bit-shift" - -#: ../plcopen/iec_std.csv:66 -msgid "Bitwise" -msgstr "Bitwise" - -#: ../plcopen/iec_std.csv:66 -msgid "Bitwise AND" -msgstr "Bitwise AND" - -#: ../plcopen/iec_std.csv:67 -msgid "Bitwise OR" -msgstr "Bitwise OR" - -#: ../plcopen/iec_std.csv:68 -msgid "Bitwise XOR" -msgstr "Bitwise XOR" - -#: ../plcopen/iec_std.csv:69 -msgid "Bitwise inverting" -msgstr "Bitwise inverting" - -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 -msgid "Block" -msgstr "Bloco" - -#: ../dialogs/FBDBlockDialog.py:60 -msgid "Block Properties" -msgstr "Propriedades do bloco" - -#: ../editors/TextViewer.py:262 -msgid "Block name" -msgstr "Nome do bloco " - -#: ../editors/Viewer.py:550 -msgid "Bottom" -msgstr "Fundo" - -#: ../ProjectController.py:1363 -msgid "Broken" -msgstr "Avariado" - -#: ../dialogs/BrowseValuesLibraryDialog.py:38 -#, python-format -msgid "Browse %s values library" -msgstr "Explore a biblioteca de valores %s" - -#: ../dialogs/BrowseLocationsDialog.py:65 -msgid "Browse Locations" -msgstr "Navegar nos endereços" - -#: ../ProjectController.py:1832 -msgid "Build" -msgstr "Compilar" - -#: ../ProjectController.py:1297 -msgid "Build directory already clean\n" -msgstr "Directório de compilação já está limpo\n" - -#: ../ProjectController.py:1833 -msgid "Build project into build folder" -msgstr "Compilar projecto no ficheiro de compilação" - -#: ../ProjectController.py:1080 -msgid "C Build crashed !\n" -msgstr "A compilação C quebrou !\n" - -#: ../ProjectController.py:1077 -msgid "C Build failed.\n" -msgstr "A compilação C falhou.\n" - -#: ../c_ext/CFileEditor.py:63 -msgid "C code" -msgstr "Codigo C" - -#: ../ProjectController.py:1155 -msgid "C code generated successfully.\n" -msgstr "Codigo C gerado com sucesso.\n" - -#: ../targets/toolchain_makefile.py:122 -msgid "C compilation failed.\n" -msgstr "A compilação C falhou.\n" - -#: ../targets/toolchain_gcc.py:192 -#, python-format -msgid "C compilation of %s failed.\n" -msgstr "A compilação C de %s falhou.\n" - -#: ../features.py:32 -msgid "C extension" -msgstr "Extensão C" - -#: ../dialogs/AboutDialog.py:71 -msgid "C&redits" -msgstr "C&redits" - -#: ../canfestival/NetworkEditor.py:52 -msgid "CANOpen network" -msgstr "Rede CANOpen" - -#: ../canfestival/SlaveEditor.py:44 -msgid "CANOpen slave" -msgstr "Escravo CANOpen" - -#: ../features.py:31 -msgid "CANopen support" -msgstr "Suporte CANOpen" - -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 -msgid "Can only generate execution order on FBD networks!" -msgstr "Só pode gerar ordens de execução em redes FBD!" - -#: ../controls/VariablePanel.py:267 -msgid "Can only give a location to local or global variables" -msgstr "Só pode gerar um endereço para variáveis locais ou globais" - -#: ../PLCOpenEditor.py:344 -#, python-format -msgid "Can't generate program to file %s!" -msgstr "Não é possivel gerar um programa no ficheiro %s !" - -#: ../controls/VariablePanel.py:265 -msgid "Can't give a location to a function block instance" -msgstr "" -"Não é possivel gerar um endereço para uma instância de bloco de função" - -#: ../PLCOpenEditor.py:389 -#, python-format -msgid "Can't save project to file %s!" -msgstr "Não é possivel salvar o projecto no ficheiro %s !" - -#: ../controls/VariablePanel.py:313 -msgid "Can't set an initial value to a function block instance" -msgstr "" -"Não é possivel atribuir um valor inicial a uma instância de bloco de função" - -#: ../ConfigTreeNode.py:529 -#, python-brace-format -msgid "Cannot create child {a1} of type {a2} " -msgstr "Não é possivel criar um elemento filho {a1} do tipo {a2} " - -#: ../ConfigTreeNode.py:454 -#, python-format -msgid "Cannot find lower free IEC channel than %d\n" -msgstr "Nâo é possivel encontrar um canal IEC livre inferior a %d\n" - -#: ../connectors/PYRO/__init__.py:131 -msgid "Cannot get PLC status - connection failed.\n" -msgstr "Não é possivel obter o estado do PLC - falha de conexão.\n" - -#: ../ProjectController.py:943 -msgid "Cannot open/parse VARIABLES.csv!\n" -msgstr "Não é possível abrir / analisar VARIÁVEIS.csv!\n" - -#: ../canfestival/config_utils.py:374 -#, python-brace-format -msgid "" -"Cannot set bit offset for non bool '{a1}' variable " -"(ID:{a2},Idx:{a3},sIdx:{a4}))" -msgstr "" -"Não é possível defenir o bit de offset para uma variavel não bool '{a1}' " -"(ID:{a2},Idx:{a3},sIdx:{a4}))" - -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 -msgid "Case sensitive" -msgstr "Maiúsculas e minúsculas" - -#: ../editors/Viewer.py:545 -msgid "Center" -msgstr "Centrar" - -#: ../Beremiz_service.py:268 -msgid "Change IP of interface to bind" -msgstr "Alterar IP da interface a ligar" - -#: ../Beremiz_service.py:267 -msgid "Change Name" -msgstr "Alterar nome" - -#: ../IDEFrame.py:1946 -msgid "Change POU Type To" -msgstr "Alterar tipo de Pou para" - -#: ../Beremiz_service.py:269 -msgid "Change Port Number" -msgstr "Alterar numero de porto" - -#: ../Beremiz_service.py:270 -msgid "Change working directory" -msgstr "Alterar directoria de trabalho" - -#: ../plcopen/iec_std.csv:81 -msgid "Character string" -msgstr "Cadeia de caracteres" - -#: ../svgui/svgui.py:128 -msgid "Choose a SVG file" -msgstr "Escolha um ficheiro SVG" - -#: ../ProjectController.py:542 -msgid "Choose a directory to save project" -msgstr "Escolha um directório para salvar projecto" - -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 -msgid "Choose a file" -msgstr "Escolha um ficheiro" - -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 -msgid "Choose a project" -msgstr "Escolha um projecto" - -#: ../dialogs/BrowseValuesLibraryDialog.py:41 -#, python-format -msgid "Choose a value for %s:" -msgstr "Escalha um valor para %s :" - -#: ../Beremiz_service.py:325 -msgid "Choose a working directory " -msgstr "Escolha um directório de trabalho" - -#: ../ProjectController.py:449 -msgid "Chosen folder doesn't contain a program. It's not a valid project!" -msgstr "A pasta escolhida não contém um programa. Não é um projecto válido!" - -#: ../ProjectController.py:416 -msgid "Chosen folder isn't empty. You can't use it for a new project!" -msgstr "" -"A pasta escolhida não está vazia. Não pode ser usada para um novo projecto!" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 -msgid "Class" -msgstr "Classe" - -#: ../controls/VariablePanel.py:441 -msgid "Class Filter:" -msgstr "Filtro de Classe:" - -#: ../dialogs/FBDVariableDialog.py:70 -msgid "Class:" -msgstr "Classe:" - -#: ../ProjectController.py:1836 -msgid "Clean" -msgstr "Limpar" - -#: ../controls/LogViewer.py:318 -msgid "Clean log messages" -msgstr "Limpar menssagens log" - -#: ../ProjectController.py:1838 -msgid "Clean project build folder" -msgstr "Limpar a pasta de compilação do projeto" - -#: ../ProjectController.py:1294 -msgid "Cleaning the build directory\n" -msgstr "Limpar o directório de compilação\n" - -#: ../IDEFrame.py:435 -msgid "Clear Errors" -msgstr "limpar erros" - -#: ../editors/Viewer.py:641 -msgid "Clear Execution Order" -msgstr "limpar ordem de execução" - -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 -msgid "Close" -msgstr "Fechar" - -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 -msgid "Close Application" -msgstr "Fechar aplicação" - -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 -msgid "Close Project" -msgstr "Fechar projecto" - -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 -msgid "Close Tab" -msgstr "Fechar aba" - -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 -msgid "Coil" -msgstr "Bobine" - -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 -msgid "Comment" -msgstr "Comentário" - -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 -msgid "Community support" -msgstr "Suporte da comunidade" - -#: ../dialogs/ProjectDialog.py:60 -msgid "Company Name" -msgstr "Nome da Empresa" - -#: ../controls/ProjectPropertiesPanel.py:95 -msgid "Company Name (required):" -msgstr "Nome da Empresa (obrigatório):" - -#: ../controls/ProjectPropertiesPanel.py:96 -msgid "Company URL (optional):" -msgstr "URL da Empresa (opcional):" - -#: ../plcopen/iec_std.csv:75 -msgid "Comparison" -msgstr "Comparação" - -#: ../ProjectController.py:734 -msgid "Compiling IEC Program into C code...\n" -msgstr "A compilar programa ICE para codigo C...\n" - -#: ../plcopen/iec_std.csv:85 -msgid "Concatenation" -msgstr "Concatenação" - -#: ../editors/ConfTreeNodeEditor.py:230 -msgid "Config" -msgstr "Config" - -#: ../editors/ProjectNodeEditor.py:36 -msgid "Config variables" -msgstr "Config variáveis" - -#: ../dialogs/SearchInProjectDialog.py:40 -msgid "Configuration" -msgstr "Configuração" - -#: ../PLCControler.py:99 -msgid "Configurations" -msgstr "Configurações" - -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 -msgid "Confirm or change variable name" -msgstr "Confirme ou altere o nome da variável" - -#: ../ProjectController.py:1851 -msgid "Connect" -msgstr "Conectar" - -#: ../ProjectController.py:1852 -msgid "Connect to the target PLC" -msgstr "Conectar ao PLC alvo" - -#: ../ProjectController.py:1354 -#, python-format -msgid "Connected to URI: %s" -msgstr "Conectar ao URI: %s" - -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 -msgid "Connection" -msgstr "Conexão" - -#: ../dialogs/ConnectionDialog.py:53 -msgid "Connection Properties" -msgstr "Propriedades da conexão" - -#: ../ProjectController.py:1709 -msgid "Connection canceled!\n" -msgstr "Conexão cancelada!\n" - -#: ../ProjectController.py:1734 -#, python-format -msgid "Connection failed to %s!\n" -msgstr "Falha na conexão a %s !\n" - -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 -msgid "Connection lost!\n" -msgstr "Conexão perdida!\n" - -#: ../connectors/PYRO/__init__.py:102 -#, python-format -msgid "Connection to '%s' failed.\n" -msgstr "A conexão com %s falhou.\n" - -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 -msgid "Connector" -msgstr "Conector" - -#: ../dialogs/SFCStepDialog.py:66 -msgid "Connectors:" -msgstr "Conectores:" - -#: ../BeremizIDE.py:350 -msgid "Console" -msgstr "Consola" - -#: ../controls/VariablePanel.py:60 -msgid "Constant" -msgstr "Constante" - -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 -msgid "Contact" -msgstr "Contacto" - -#: ../controls/ProjectPropertiesPanel.py:198 -msgid "Content Description (optional):" -msgstr "descrição de conteúdo (opcional):" - -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 -msgid "Continuation" -msgstr "Continuação" - -#: ../plcopen/iec_std.csv:18 -msgid "Conversion from BCD" -msgstr "Conversão de BCD" - -#: ../plcopen/iec_std.csv:19 -msgid "Conversion to BCD" -msgstr "Conversão para BCD" - -#: ../plcopen/iec_std.csv:21 -msgid "Conversion to date" -msgstr "Conversão para data" - -#: ../plcopen/iec_std.csv:20 -msgid "Conversion to time-of-day" -msgstr "Conversão para hora-do-dia" - -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 -msgid "Copy" -msgstr "Copiar" - -#: ../IDEFrame.py:1933 -msgid "Copy POU" -msgstr "Copiar POU" - -#: ../editors/FileManagementPanel.py:65 -msgid "Copy file from left folder to right" -msgstr "Copiar o arquivo da pasta esquerda para a direita" - -#: ../editors/FileManagementPanel.py:64 -msgid "Copy file from right folder to left" -msgstr "Copiar o arquivo da pasta direita para a esquerda" - -#: ../plcopen/iec_std.csv:28 -msgid "Cosine" -msgstr "Coseno" - -#: ../ConfigTreeNode.py:656 -#, python-brace-format -msgid "" -"Could not add child \"{a1}\", type {a2} :\n" -"{a3}\n" -msgstr "" -"Não foi possível adicionar elemento filho \"{a1}\", tipo {a2}:\n" -" {a3} \n" - -#: ../py_ext/PythonFileCTNMixin.py:78 -#, python-format -msgid "Couldn't import old %s file." -msgstr "Não foi possivél importar o ficheiro antigo %s." - -#: ../ConfigTreeNode.py:626 -#, python-brace-format -msgid "" -"Couldn't load confnode base parameters {a1} :\n" -" {a2}" -msgstr "" -"Não foi possível carregar parâmetros base de confnode {a1} : \n" -" {a2}" - -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 -#, python-brace-format -msgid "" -"Couldn't load confnode parameters {a1} :\n" -" {a2}" -msgstr "" -"Não foi possível carregar parâmetros de confnode {a1} : \n" -" {a2}" - -#: ../PLCControler.py:948 -msgid "Couldn't paste non-POU object." -msgstr "Não foi possível colar o objeto não-POU." - -#: ../ProjectController.py:1651 -msgid "Couldn't start PLC !\n" -msgstr "Não foi possível iniciar o PLC!\n" - -#: ../ProjectController.py:1659 -msgid "Couldn't stop PLC !\n" -msgstr "Não foi possível parar o PLC!\n" - -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Não foi possível parar o depurador.\n" - -#: ../svgui/svgui.py:49 -msgid "Create HMI" -msgstr "Criar HMI" - -#: ../dialogs/PouDialog.py:46 -msgid "Create a new POU" -msgstr "Criar uma nova POU" - -#: ../dialogs/PouActionDialog.py:38 -msgid "Create a new action" -msgstr "Criar uma nova acção" - -#: ../IDEFrame.py:159 -msgid "Create a new action block" -msgstr "Criar um novo bloco de ação" - -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 -msgid "Create a new block" -msgstr "Criar um novo bloco" - -#: ../IDEFrame.py:132 -msgid "Create a new branch" -msgstr "Criar uma nova ramificação" - -#: ../IDEFrame.py:126 -msgid "Create a new coil" -msgstr "Criar uma nova bobine" - -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 -msgid "Create a new comment" -msgstr "Criar um novo comentário" - -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 -msgid "Create a new connection" -msgstr "Criar uma nova conexão" - -#: ../IDEFrame.py:129 ../IDEFrame.py:180 -msgid "Create a new contact" -msgstr "Criar um novo contacto" - -#: ../IDEFrame.py:162 -msgid "Create a new divergence" -msgstr "Criar uma nova divergência" - -#: ../dialogs/SFCDivergenceDialog.py:53 -msgid "Create a new divergence or convergence" -msgstr "Criar uma nova divergência ou convergência" - -#: ../IDEFrame.py:150 -msgid "Create a new initial step" -msgstr "Criar um novo passo inicial" - -#: ../IDEFrame.py:165 -msgid "Create a new jump" -msgstr "Criar um novo salto" - -#: ../IDEFrame.py:120 ../IDEFrame.py:177 -msgid "Create a new power rail" -msgstr "Criar um novo trilho de energia" - -#: ../IDEFrame.py:123 -msgid "Create a new rung" -msgstr "Criar uma nova rung" - -#: ../IDEFrame.py:153 -msgid "Create a new step" -msgstr "Criar um novo passo" - -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 -msgid "Create a new transition" -msgstr "Criar uma nova transição" - -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 -msgid "Create a new variable" -msgstr "Criar uma nova variável" - -#: ../dialogs/AboutDialog.py:113 -msgid "Credits" -msgstr "Creditos" - -#: ../Beremiz_service.py:434 -msgid "Current working directory :" -msgstr "Directoria de trabalho actual" - -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 -msgid "Cut" -msgstr "Cortar" - -#: ../editors/ResourceEditor.py:72 -msgid "Cyclic" -msgstr "Cíclico" - -#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 -#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 -#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 -#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 -#: ../plcopen/iec_std.csv:60 -msgid "DEPRECATED" -msgstr "Descontinuada" - -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 -msgid "DS-301 Profile" -msgstr "Perfile DS-301" - -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 -msgid "DS-302 Profile" -msgstr "Perfile DS-302" - -#: ../dialogs/SearchInProjectDialog.py:36 -msgid "Data Type" -msgstr "Tipo de dado" - -#: ../PLCControler.py:98 -msgid "Data Types" -msgstr "Tipo de dados" - -#: ../plcopen/iec_std.csv:16 -msgid "Data type conversion" -msgstr "Converção de tipo de dados" - -#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 -msgid "Date addition" -msgstr "Adição de data" - -#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 -#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 -msgid "Date and time subtraction" -msgstr "Subtração de data e hora" - -#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 -msgid "Date subtraction" -msgstr "Subtração de data" - -#: ../dialogs/DurationEditorDialog.py:44 -msgid "Days:" -msgstr "Dias:" - -#: ../ProjectController.py:1756 -msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" -msgstr "" -"Depuração não corresponde ao PLC - parar / transferir / iniciar para " -"reativar\n" - -#: ../controls/PouInstanceVariablesPanel.py:134 -msgid "Debug instance" -msgstr "Depurar a instância" - -#: ../editors/Viewer.py:448 -#, python-format -msgid "Debug: %s" -msgstr "depuração %s" - -#: ../ProjectController.py:1412 -#, python-format -msgid "Debug: Unknown variable '%s'\n" -msgstr "Depuração: Variável desconhecida '%s '\n" - -#: ../ProjectController.py:1410 -#, python-format -msgid "Debug: Unsupported type to debug '%s'\n" -msgstr "Depuração: Tipo não suportado para depurar ' %s '\n" - -#: ../IDEFrame.py:639 -msgid "Debugger" -msgstr "Depurador" - -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Depurador desabilitado\n" - -#: ../ProjectController.py:1753 -msgid "Debugger ready\n" -msgstr "Depurador pronto\n" - -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Depurador parado\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 -msgid "Delete" -msgstr "Eliminar" - -#: ../editors/Viewer.py:573 -msgid "Delete Divergence Branch" -msgstr "Eliminar ramificação de divergência" - -#: ../editors/FileManagementPanel.py:153 -msgid "Delete File" -msgstr "Eliminar ficheiro" - -#: ../editors/Viewer.py:560 -msgid "Delete Wire Segment" -msgstr "Eliminar seguemento de fio" - -#: ../controls/CustomEditableListBox.py:41 -msgid "Delete item" -msgstr "Eliminar item" - -#: ../plcopen/iec_std.csv:88 -msgid "Deletion (within)" -msgstr "Eliminação (dentro)" - -#: ../editors/DataTypeEditor.py:153 -msgid "Derivation Type:" -msgstr "Tipo de Derivação:" - -#: ../editors/CodeFileEditor.py:739 -msgid "Description" -msgstr "Descrição" - -#: ../controls/VariablePanel.py:432 -msgid "Description:" -msgstr "Descrição:" - -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 -msgid "Dimensions:" -msgstr "Dimensões:" - -#: ../dialogs/FindInPouDialog.py:66 -msgid "Direction" -msgstr "Direcção" - -#: ../dialogs/BrowseLocationsDialog.py:91 -msgid "Direction:" -msgstr "Direcção:" - -#: ../editors/DataTypeEditor.py:54 -msgid "Directly" -msgstr "Diretamente" - -#: ../ProjectController.py:1860 -msgid "Disconnect" -msgstr "" - -#: ../ProjectController.py:1862 -msgid "Disconnect from PLC" -msgstr "" - -#: ../ProjectController.py:1364 -msgid "Disconnected" -msgstr "" - -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 -msgid "Divergence" -msgstr "" - -#: ../plcopen/iec_std.csv:36 -msgid "Division" -msgstr "" - -#: ../editors/FileManagementPanel.py:152 -#, python-format -msgid "Do you really want to delete the file '%s'?" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 -msgid "Documentation" -msgstr "" - -#: ../PLCOpenEditor.py:338 -msgid "Done" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 -msgid "Duration" -msgstr "" - -#: ../canfestival/canfestival.py:165 -msgid "EDS files (*.eds)|*.eds|All files|*.*" -msgstr "" - -#: ../editors/Viewer.py:629 -msgid "Edit Block" -msgstr "" - -#: ../dialogs/LDElementDialog.py:56 -msgid "Edit Coil Values" -msgstr "" - -#: ../dialogs/LDElementDialog.py:54 -msgid "Edit Contact Values" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:59 -msgid "Edit Duration" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:51 -msgid "Edit Step" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:38 -msgid "Edit a WxWidgets GUI with WXGlade" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:121 -msgid "Edit action block properties" -msgstr "" - -#: ../dialogs/ArrayTypeDialog.py:44 -msgid "Edit array type properties" -msgstr "" - -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 -msgid "Edit comment" -msgstr "" - -#: ../editors/FileManagementPanel.py:66 -msgid "Edit file" -msgstr "" - -#: ../controls/CustomEditableListBox.py:39 -msgid "Edit item" -msgstr "" - -#: ../editors/Viewer.py:3014 -msgid "Edit jump target" -msgstr "" - -#: ../ProjectController.py:1874 -msgid "Edit raw IEC code added to code generated by PLCGenerator" -msgstr "" - -#: ../editors/SFCViewer.py:799 -msgid "Edit step name" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:52 -msgid "Edit transition" -msgstr "" - -#: ../IDEFrame.py:611 -msgid "Editor ToolBar" -msgstr "" - -#: ../ProjectController.py:1257 -msgid "Editor selection" -msgstr "" - -#: ../editors/DataTypeEditor.py:348 -msgid "Elements :" -msgstr "" - -#: ../ProjectController.py:1362 -msgid "Empty" -msgstr "" - -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "" - -#: ../Beremiz_service.py:333 -msgid "Enter a name " -msgstr "" - -#: ../Beremiz_service.py:318 -msgid "Enter a port number " -msgstr "" - -#: ../Beremiz_service.py:309 -msgid "Enter the IP of the interface to bind" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 -msgid "Enumerated" -msgstr "" - -#: ../plcopen/iec_std.csv:77 -msgid "Equal to" -msgstr "" - -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 -msgid "Error" -msgstr "" - -#: ../ProjectController.py:789 -msgid "" -"Error : At least one configuration and one resource must be declared in PLC " -"!\n" -msgstr "" - -#: ../ProjectController.py:781 -#, python-format -msgid "Error : IEC to C compiler returned %d\n" -msgstr "" - -#: ../ProjectController.py:712 -#, python-format -msgid "" -"Error in ST/IL/SFC code generator :\n" -"%s\n" -msgstr "" - -#: ../ConfigTreeNode.py:216 -#, python-format -msgid "Error while saving \"%s\"\n" -msgstr "" - -#: ../canfestival/canfestival.py:170 -msgid "Error: Export slave failed\n" -msgstr "" - -#: ../canfestival/canfestival.py:371 -msgid "Error: No Master generated\n" -msgstr "" - -#: ../canfestival/canfestival.py:366 -msgid "Error: No PLC built\n" -msgstr "" - -#: ../ProjectController.py:1728 -#, python-format -msgid "Exception while connecting %s!\n" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:120 -msgid "Execution Control:" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 -msgid "Execution Order:" -msgstr "" - -#: ../features.py:35 -msgid "Experimental web based HMI" -msgstr "" - -#: ../plcopen/iec_std.csv:38 -msgid "Exponent" -msgstr "" - -#: ../plcopen/iec_std.csv:26 -msgid "Exponentiation" -msgstr "" - -#: ../canfestival/canfestival.py:176 -msgid "Export CanOpen slave to EDS file" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 -msgid "Export graph values to clipboard" -msgstr "" - -#: ../canfestival/canfestival.py:175 -msgid "Export slave" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:90 -msgid "Expression:" -msgstr "" - -#: ../controls/VariablePanel.py:72 -msgid "External" -msgstr "" - -#: ../ProjectController.py:802 -msgid "Extracting Located Variables...\n" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 -msgid "FBD" -msgstr "" - -#: ../ProjectController.py:1791 -msgid "Failed : Must build before transfer.\n" -msgstr "" - -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 -msgid "Falling Edge" -msgstr "" - -#: ../ProjectController.py:1070 -msgid "Fatal : cannot get builder.\n" -msgstr "" - -#: ../Beremiz.py:156 -#, python-format -msgid "Fetching %s" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:164 -#, python-format -msgid "Field %s hasn't a valid value!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:166 -#, python-format -msgid "Fields %s haven't a valid value!" -msgstr "" - -#: ../controls/FolderTree.py:216 -#, python-format -msgid "File '%s' already exists!" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 -msgid "Find" -msgstr "" - -#: ../IDEFrame.py:377 -msgid "Find Next" -msgstr "" - -#: ../IDEFrame.py:379 -msgid "Find Previous" -msgstr "" - -#: ../plcopen/iec_std.csv:90 -msgid "Find position" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:55 -msgid "Find:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "" - -#: ../editors/Viewer.py:1600 -msgid "Force value" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:162 -msgid "Forcing Variable Value" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 -#, python-format -msgid "Form isn't complete. %s must be filled!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 -msgid "Form isn't complete. Name must be filled!" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:232 -msgid "Form isn't complete. Valid block type must be selected!" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:72 -msgid "Forward" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 -msgid "Function" -msgstr "" - -#: ../IDEFrame.py:349 -msgid "Function &Block" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 -msgid "Function Block" -msgstr "" - -#: ../controls/VariablePanel.py:854 -msgid "Function Block Types" -msgstr "" - -#: ../PLCControler.py:97 -msgid "Function Blocks" -msgstr "" - -#: ../editors/Viewer.py:249 -msgid "Function Blocks can't be used in Functions!" -msgstr "" - -#: ../PLCControler.py:2343 -#, python-format -msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" -msgstr "" - -#: ../PLCControler.py:97 -msgid "Functions" -msgstr "" - -#: ../PLCOpenEditor.py:117 -msgid "Generate Program" -msgstr "" - -#: ../ProjectController.py:703 -msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" -msgstr "" - -#: ../controls/VariablePanel.py:73 -msgid "Global" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 -msgid "Go to current value" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:174 -msgid "Graphics" -msgstr "" - -#: ../plcopen/iec_std.csv:75 -msgid "Greater than" -msgstr "" - -#: ../plcopen/iec_std.csv:76 -msgid "Greater than or equal to" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:135 -msgid "Grid Resolution:" -msgstr "" - -#: ../runtime/NevowServer.py:182 -msgid "HTTP interface port :" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:121 -msgid "Height:" -msgstr "" - -#: ../editors/FileManagementPanel.py:85 -msgid "Home Directory:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:151 -msgid "Horizontal:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:45 -msgid "Hours:" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 -msgid "IL" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:94 -msgid "IP" -msgstr "" - -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 -msgid "IP is not valid!" -msgstr "" - -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 -msgid "Import SVG" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 -msgid "InOut" -msgstr "" - -#: ../editors/Viewer.py:431 -msgid "Inactive" -msgstr "" - -#: ../controls/VariablePanel.py:276 -#, python-brace-format -msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../controls/VariablePanel.py:282 -#, python-format -msgid "Incompatible size of data between \"%s\" and \"BOOL\"" -msgstr "" - -#: ../controls/VariablePanel.py:286 -#, python-brace-format -msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 -msgid "Indicator" -msgstr "" - -#: ../editors/CodeFileEditor.py:739 -msgid "Initial" -msgstr "" - -#: ../editors/Viewer.py:611 -msgid "Initial Step" -msgstr "" - -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 -msgid "Initial Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 -msgid "Initial Value:" -msgstr "" - -#: ../svgui/svgui.py:48 -msgid "Inkscape" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 -msgid "Inline" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 -msgid "Input" -msgstr "" - -#: ../dialogs/FBDBlockDialog.py:96 -msgid "Inputs:" -msgstr "" - -#: ../plcopen/iec_std.csv:87 -msgid "Insertion (into)" -msgstr "" - -#: ../plcopen/plcopen.py:1696 -#, python-format -msgid "Instance with id %d doesn't exist!" -msgstr "" - -#: ../editors/ResourceEditor.py:264 -msgid "Instances:" -msgstr "" - -#: ../controls/VariablePanel.py:70 -msgid "Interface" -msgstr "" - -#: ../editors/ResourceEditor.py:72 -msgid "Interrupt" -msgstr "" - -#: ../editors/ResourceEditor.py:68 -msgid "Interval" -msgstr "" - -#: ../PLCControler.py:2331 -msgid "Invalid plcopen element(s)!!!" -msgstr "" - -#: ../canfestival/config_utils.py:381 -#, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "" - -#: ../canfestival/config_utils.py:645 -#, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 -#, python-format -msgid "Invalid value \"%s\" for debug variable" -msgstr "" - -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 -#, python-format -msgid "Invalid value \"%s\" for variable grid element" -msgstr "" - -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 -#, python-format -msgid "Invalid value \"%s\" for viewer block" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:195 -#, python-brace-format -msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:121 -msgid "" -"Invalid value!\n" -"You must fill a numeric value." -msgstr "" - -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 -msgid "Jump" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 -msgid "LD" -msgstr "" - -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 -#, python-format -msgid "Ladder element with id %d is on more than one rung." -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 -msgid "Language" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:187 -msgid "Language (optional):" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 -msgid "Language:" -msgstr "" - -#: ../ProjectController.py:1797 -msgid "Latest build already matches current target. Transfering anyway...\n" -msgstr "" - -#: ../Beremiz_service.py:273 -msgid "Launch WX GUI inspector" -msgstr "" - -#: ../Beremiz_service.py:272 -msgid "Launch a live Python shell" -msgstr "" - -#: ../editors/Viewer.py:544 -msgid "Left" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:63 -msgid "Left PowerRail" -msgstr "" - -#: ../plcopen/iec_std.csv:81 -msgid "Length of string" -msgstr "" - -#: ../plcopen/iec_std.csv:78 -msgid "Less than" -msgstr "" - -#: ../plcopen/iec_std.csv:79 -msgid "Less than or equal to" -msgstr "" - -#: ../IDEFrame.py:631 -msgid "Library" -msgstr "" - -#: ../dialogs/AboutDialog.py:151 -msgid "License" -msgstr "" - -#: ../plcopen/iec_std.csv:73 -msgid "Limitation" -msgstr "" - -#: ../targets/toolchain_gcc.py:202 -msgid "Linking :\n" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 -msgid "Local" -msgstr "" - -#: ../canfestival/canfestival.py:348 -msgid "Local entries" -msgstr "" - -#: ../ProjectController.py:1703 -msgid "Local service discovery failed!\n" -msgstr "" - -#: ../controls/VariablePanel.py:53 -msgid "Location" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:72 -msgid "Locations available:" -msgstr "" - -#: ../plcopen/iec_std.csv:25 -msgid "Logarithm to base 10" -msgstr "" - -#: ../connectors/PYRO/__init__.py:94 -#, python-format -msgid "MDNS resolution failure for '%s'\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 -msgid "Map Variable" -msgstr "" - -#: ../features.py:31 -msgid "Map located variables over CANopen" -msgstr "" - -#: ../canfestival/NetworkEditor.py:106 -msgid "Master" -msgstr "" - -#: ../ConfigTreeNode.py:539 -#, python-brace-format -msgid "Max count ({a1}) reached for this confnode of type {a2} " -msgstr "" - -#: ../plcopen/iec_std.csv:71 -msgid "Maximum" -msgstr "" - -#: ../editors/DataTypeEditor.py:239 -msgid "Maximum:" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 -msgid "Memory" -msgstr "" - -#: ../IDEFrame.py:599 -msgid "Menu ToolBar" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:49 -msgid "Microseconds:" -msgstr "" - -#: ../editors/Viewer.py:549 -msgid "Middle" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:48 -msgid "Milliseconds:" -msgstr "" - -#: ../plcopen/iec_std.csv:72 -msgid "Minimum" -msgstr "" - -#: ../editors/DataTypeEditor.py:226 -msgid "Minimum:" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:46 -msgid "Minutes:" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:211 -msgid "Miscellaneous" -msgstr "" - -#: ../dialogs/LDElementDialog.py:63 -msgid "Modifier:" -msgstr "" - -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 -#, python-brace-format -msgid "" -"More than one connector found corresponding to \"{a1}\" continuation in " -"\"{a2}\" POU" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:140 -msgid "Move action down" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:139 -msgid "Move action up" -msgstr "" - -#: ../controls/CustomEditableListBox.py:43 -msgid "Move down" -msgstr "" - -#: ../editors/DataTypeEditor.py:355 -msgid "Move element down" -msgstr "" - -#: ../editors/DataTypeEditor.py:354 -msgid "Move element up" -msgstr "" - -#: ../editors/ResourceEditor.py:271 -msgid "Move instance down" -msgstr "" - -#: ../editors/ResourceEditor.py:270 -msgid "Move instance up" -msgstr "" - -#: ../editors/ResourceEditor.py:242 -msgid "Move task down" -msgstr "" - -#: ../editors/ResourceEditor.py:241 -msgid "Move task up" -msgstr "" - -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 -msgid "Move the view" -msgstr "" - -#: ../controls/CustomEditableListBox.py:42 -msgid "Move up" -msgstr "" - -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 -msgid "Move variable down" -msgstr "" - -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 -msgid "Move variable up" -msgstr "" - -#: ../plcopen/iec_std.csv:74 -msgid "Multiplexer (select 1 of N)" -msgstr "" - -#: ../plcopen/iec_std.csv:34 -msgid "Multiplication" -msgstr "" - -#: ../editors/FileManagementPanel.py:83 -msgid "My Computer:" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:92 -msgid "NAME" -msgstr "" - -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 -msgid "Name" -msgstr "" - -#: ../Beremiz_service.py:334 -msgid "Name must not be null!" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 -msgid "Name:" -msgstr "" - -#: ../plcopen/iec_std.csv:24 -msgid "Natural logarithm" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 -msgid "Negated" -msgstr "" - -#: ../Beremiz_service.py:580 -msgid "Nevow Web service failed. " -msgstr "" - -#: ../Beremiz_service.py:556 -msgid "Nevow/Athena import failed :" -msgstr "" - -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 -msgid "New" -msgstr "" - -#: ../controls/CustomEditableListBox.py:40 -msgid "New item" -msgstr "" - -#: ../editors/Viewer.py:518 -msgid "No Modifier" -msgstr "" - -#: ../ProjectController.py:1826 -msgid "No PLC to transfer (did build succeed ?)\n" -msgstr "" - -#: ../PLCGenerator.py:1631 -#, python-format -msgid "No body defined in \"%s\" POU" -msgstr "" - -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 -#, python-brace-format -msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" -msgstr "" - -#: ../PLCOpenEditor.py:357 -msgid "" -"No documentation available.\n" -"Coming soon." -msgstr "" - -#: ../PLCGenerator.py:829 -#, python-format -msgid "No informations found for \"%s\" block" -msgstr "" - -#: ../PLCGenerator.py:1194 -#, python-brace-format -msgid "" -"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " -"broken" -msgstr "" - -#: ../controls/SearchResultPanel.py:169 -msgid "No search results available." -msgstr "" - -#: ../svgui/svgui.py:134 -#, python-format -msgid "No such SVG file: %s\n" -msgstr "" - -#: ../canfestival/config_utils.py:639 -#, python-brace-format -msgid "No such index/subindex ({a1},{a2}) (variable {a3})" -msgstr "" - -#: ../canfestival/config_utils.py:362 -#, python-brace-format -msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" -msgstr "" - -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -msgid "No valid value selected!" -msgstr "" - -#: ../PLCGenerator.py:1629 -#, python-format -msgid "No variable defined in \"%s\" POU" -msgstr "" - -#: ../canfestival/config_utils.py:355 -#, python-brace-format -msgid "Non existing node ID : {a1} (variable {a2})" -msgstr "" - -#: ../controls/VariablePanel.py:64 -msgid "Non-Retain" -msgstr "" - -#: ../dialogs/LDElementDialog.py:75 -msgid "Normal" -msgstr "" - -#: ../canfestival/config_utils.py:389 -#, python-brace-format -msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" -msgstr "" - -#: ../plcopen/iec_std.csv:80 -msgid "Not equal to" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:89 -msgid "Number of sequences:" -msgstr "" - -#: ../plcopen/iec_std.csv:22 -msgid "Numerical" -msgstr "" - -#: ../editors/CodeFileEditor.py:739 -msgid "OnChange" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:84 -msgid "Only Elements" -msgstr "" - -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 -msgid "Open" -msgstr "" - -#: ../svgui/svgui.py:143 -msgid "Open Inkscape" -msgstr "" - -#: ../version.py:77 -msgid "" -"Open Source framework for automation, implemented IEC 61131 IDE with " -"constantly growing set of extensions and flexible PLC runtime." -msgstr "" - -#: ../ProjectController.py:1878 -msgid "Open a file explorer to manage project files" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:155 -msgid "Open wxGlade" -msgstr "" - -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 -msgid "Option" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 -msgid "Options" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:98 -msgid "Organization (optional):" -msgstr "" - -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 -msgid "Other Profile" -msgstr "" - -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 -msgid "Output" -msgstr "" - -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 -msgid "PDO Receive" -msgstr "" - -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 -msgid "PDO Transmit" -msgstr "" - -#: ../targets/toolchain_gcc.py:167 -msgid "PLC :\n" -msgstr "" - -#: ../BeremizIDE.py:355 -msgid "PLC Log" -msgstr "" - -#: ../ProjectController.py:1054 -msgid "PLC code generation failed !\n" -msgstr "" - -#: ../Beremiz_service.py:297 -msgid "PLC is empty or already started." -msgstr "" - -#: ../Beremiz_service.py:304 -msgid "PLC is not started." -msgstr "" - -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 -#, python-brace-format -msgid "" -"PLC syntax error at line {a1}:\n" -"{a2}" -msgstr "" - -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 -msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" -msgstr "" - -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 -msgid "PLCOpenEditor" -msgstr "" - -#: ../PLCOpenEditor.py:365 -msgid "" -"PLCOpenEditor is part of Beremiz project.\n" -"\n" -"Beremiz is an " -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:95 -msgid "PORT" -msgstr "" - -#: ../dialogs/PouDialog.py:101 -msgid "POU Name" -msgstr "" - -#: ../dialogs/PouDialog.py:58 -msgid "POU Name:" -msgstr "" - -#: ../dialogs/PouDialog.py:103 -msgid "POU Type" -msgstr "" - -#: ../dialogs/PouDialog.py:65 -msgid "POU Type:" -msgstr "" - -#: ../connectors/PYRO/__init__.py:45 -#, python-format -msgid "PYRO connecting to URI : %s\n" -msgstr "" - -#: ../connectors/PYRO/__init__.py:61 -#, python-format -msgid "PYRO using certificates in '%s' \n" -msgstr "" - -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 -msgid "Page Setup" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:111 -msgid "Page Size (optional):" -msgstr "" - -#: ../IDEFrame.py:2613 -#, python-format -msgid "Page: %d" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:124 -msgid "Parent instance" -msgstr "" - -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 -msgid "Paste" -msgstr "" - -#: ../IDEFrame.py:1868 -msgid "Paste POU" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:56 -msgid "Pattern to search:" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:74 -msgid "Pin number:" -msgstr "" - -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 -msgid "Please choose a target" -msgstr "" - -#: ../editors/TextViewer.py:262 -msgid "Please enter a block name" -msgstr "" - -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 -msgid "Please enter comment text" -msgstr "" - -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 -msgid "Please enter step name" -msgstr "" - -#: ../Beremiz_service.py:196 -msgid "Please enter text" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:163 -#, python-format -msgid "Please enter value for a \"%s\" variable:" -msgstr "" - -#: ../Beremiz_service.py:319 -msgid "Port number must be 0 <= port <= 65535!" -msgstr "" - -#: ../Beremiz_service.py:319 -msgid "Port number must be an integer!" -msgstr "" - -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 -msgid "Power Rail" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:51 -msgid "Power Rail Properties" -msgstr "" - -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 -msgid "Preview" -msgstr "" - -#: ../dialogs/BlockPreviewDialog.py:57 -msgid "Preview:" -msgstr "" - -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 -msgid "Print" -msgstr "" - -#: ../IDEFrame.py:1079 -msgid "Print preview" -msgstr "" - -#: ../editors/ResourceEditor.py:68 -msgid "Priority" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:90 -msgid "Priority:" -msgstr "" - -#: ../runtime/PLCObject.py:369 -#, python-format -msgid "Problem starting PLC : error %d" -msgstr "" - -#: ../dialogs/ProjectDialog.py:58 -msgid "Product Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:81 -msgid "Product Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:83 -msgid "Product Release (optional):" -msgstr "" - -#: ../dialogs/ProjectDialog.py:59 -msgid "Product Version" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:82 -msgid "Product Version (required):" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 -msgid "Program" -msgstr "" - -#: ../PLCOpenEditor.py:347 -msgid "Program was successfully generated!" -msgstr "" - -#: ../PLCControler.py:98 -msgid "Programs" -msgstr "" - -#: ../editors/Viewer.py:243 -msgid "Programs can't be used by other POUs!" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 -msgid "Project" -msgstr "" - -#: ../controls/SearchResultPanel.py:173 -#, python-format -msgid "Project '%s':" -msgstr "" - -#: ../ProjectController.py:1877 -msgid "Project Files" -msgstr "" - -#: ../dialogs/ProjectDialog.py:57 -msgid "Project Name" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:79 -msgid "Project Name (required):" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:80 -msgid "Project Version (optional):" -msgstr "" - -#: ../PLCControler.py:3164 -msgid "" -"Project file syntax error:\n" -"\n" -msgstr "" - -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 -msgid "Project properties" -msgstr "" - -#: ../ConfigTreeNode.py:566 -#, python-brace-format -msgid "Project tree layout do not match confnode.xml {a1}!={a2} " -msgstr "" - -#: ../dialogs/ConnectionDialog.py:98 -msgid "Propagate Name" -msgstr "" - -#: ../PLCControler.py:99 -msgid "Properties" -msgstr "" - -#: ../Beremiz_service.py:442 -msgid "Publishing service on local network" -msgstr "" - -#: ../connectors/PYRO/__init__.py:118 -#, python-format -msgid "Pyro exception: %s\n" -msgstr "" - -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "" - -#: ../Beremiz_service.py:428 -msgid "Pyro port :" -msgstr "" - -#: ../py_ext/PythonEditor.py:81 -msgid "Python code" -msgstr "" - -#: ../features.py:33 -msgid "Python file" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 -msgid "Qualifier" -msgstr "" - -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 -msgid "Quit" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 -msgid "Range:" -msgstr "" - -#: ../ProjectController.py:1873 -msgid "Raw IEC code" -msgstr "" - -#: ../BeremizIDE.py:1047 -#, python-format -msgid "Really delete node '%s'?" -msgstr "" - -#: ../IDEFrame.py:362 ../IDEFrame.py:422 -msgid "Redo" -msgstr "" - -#: ../dialogs/SFCTransitionDialog.py:75 -msgid "Reference" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 -msgid "Refresh" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:66 -msgid "Regular expression" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:96 -msgid "Regular expressions" -msgstr "" - -#: ../editors/Viewer.py:1603 -msgid "Release value" -msgstr "" - -#: ../plcopen/iec_std.csv:37 -msgid "Remainder (modulo)" -msgstr "" - -#: ../BeremizIDE.py:1048 -#, python-format -msgid "Remove %s node" -msgstr "" - -#: ../IDEFrame.py:2419 -msgid "Remove Datatype" -msgstr "" - -#: ../IDEFrame.py:2424 -msgid "Remove Pou" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:138 -msgid "Remove action" -msgstr "" - -#: ../editors/DataTypeEditor.py:353 -msgid "Remove element" -msgstr "" - -#: ../editors/FileManagementPanel.py:63 -msgid "Remove file from left folder" -msgstr "" - -#: ../editors/ResourceEditor.py:269 -msgid "Remove instance" -msgstr "" - -#: ../canfestival/NetworkEditor.py:104 -msgid "Remove slave" -msgstr "" - -#: ../editors/ResourceEditor.py:240 -msgid "Remove task" -msgstr "" - -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 -msgid "Remove variable" -msgstr "" - -#: ../IDEFrame.py:1948 -msgid "Rename" -msgstr "" - -#: ../editors/FileManagementPanel.py:181 -msgid "Replace File" -msgstr "" - -#: ../editors/Viewer.py:561 -msgid "Replace Wire by connections" -msgstr "" - -#: ../plcopen/iec_std.csv:89 -msgid "Replacement (within)" -msgstr "" - -#: ../dialogs/LDElementDialog.py:76 -msgid "Reset" -msgstr "" - -#: ../editors/Viewer.py:642 -msgid "Reset Execution Order" -msgstr "" - -#: ../IDEFrame.py:451 -msgid "Reset Perspective" -msgstr "" - -#: ../controls/SearchResultPanel.py:105 -msgid "Reset search result" -msgstr "" - -#: ../BeremizIDE.py:979 ../PLCControler.py:99 -msgid "Resources" -msgstr "" - -#: ../controls/VariablePanel.py:62 -msgid "Retain" -msgstr "" - -#: ../controls/VariablePanel.py:424 -msgid "Return Type:" -msgstr "" - -#: ../editors/Viewer.py:546 -msgid "Right" -msgstr "" - -#: ../dialogs/LDPowerRailDialog.py:64 -msgid "Right PowerRail" -msgstr "" - -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 -msgid "Rising Edge" -msgstr "" - -#: ../plcopen/iec_std.csv:65 -msgid "Rotate left" -msgstr "" - -#: ../plcopen/iec_std.csv:64 -msgid "Rotate right" -msgstr "" - -#: ../plcopen/iec_std.csv:17 -msgid "Rounding up/down" -msgstr "" - -#: ../ProjectController.py:1841 -msgid "Run" -msgstr "" - -#: ../ProjectController.py:1099 -msgid "Runtime IO extensions C code generation failed !\n" -msgstr "" - -#: ../ProjectController.py:1108 -msgid "Runtime library extensions C code generation failed !\n" -msgstr "" - -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 -msgid "SDO Client" -msgstr "" - -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 -msgid "SDO Server" -msgstr "" - -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 -msgid "SFC" -msgstr "" - -#: ../PLCGenerator.py:1392 -#, python-brace-format -msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" -msgstr "" - -#: ../PLCGenerator.py:773 -#, python-format -msgid "SFC transition in POU \"%s\" must be connected." -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 -msgid "ST" -msgstr "" - -#: ../PLCOpenEditor.py:334 -msgid "ST files (*.st)|*.st|All files|*.*" -msgstr "" - -#: ../svgui/svgui.py:128 -msgid "SVG files (*.svg)|*.svg|All files|*.*" -msgstr "" - -#: ../features.py:35 -msgid "SVGUI" -msgstr "" - -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 -msgid "Save" -msgstr "" - -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 -msgid "Save As..." -msgstr "" - -#: ../BeremizIDE.py:224 -msgid "Save as" -msgstr "" - -#: ../ProjectController.py:511 -msgid "Save path is the same as path of a project! \n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:69 -msgid "Scope" -msgstr "" - -#: ../IDEFrame.py:623 -msgid "Search" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 -msgid "Search in Project" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:47 -msgid "Seconds:" -msgstr "" - -#: ../IDEFrame.py:388 -msgid "Select All" -msgstr "" - -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 -msgid "Select a variable class:" -msgstr "" - -#: ../ProjectController.py:1257 -msgid "Select an editor:" -msgstr "" - -#: ../controls/PouInstanceVariablesPanel.py:281 -msgid "Select an instance" -msgstr "" - -#: ../IDEFrame.py:607 -msgid "Select an object" -msgstr "" - -#: ../ProjectController.py:518 -msgid "Selected directory already contains another project. Overwrite? \n" -msgstr "" - -#: ../plcopen/iec_std.csv:70 -msgid "Selection" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:65 -msgid "Selection Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:64 -msgid "Selection Divergence" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:82 -msgid "Service Discovery" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:85 -msgid "Services available:" -msgstr "" - -#: ../dialogs/LDElementDialog.py:76 -msgid "Set" -msgstr "" - -#: ../plcopen/iec_std.csv:62 -msgid "Shift left" -msgstr "" - -#: ../plcopen/iec_std.csv:63 -msgid "Shift right" -msgstr "" - -#: ../ProjectController.py:1867 -msgid "Show IEC code generated by PLCGenerator" -msgstr "" - -#: ../canfestival/canfestival.py:389 -msgid "Show Master" -msgstr "" - -#: ../canfestival/canfestival.py:390 -msgid "Show Master generated by config_utils" -msgstr "" - -#: ../ProjectController.py:1865 -msgid "Show code" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:67 -msgid "Simultaneous Convergence" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:66 -msgid "Simultaneous Divergence" -msgstr "" - -#: ../plcopen/iec_std.csv:27 -msgid "Sine" -msgstr "" - -#: ../editors/ResourceEditor.py:68 -msgid "Single" -msgstr "" - -#: ../targets/toolchain_makefile.py:126 -msgid "Source didn't change, no build.\n" -msgstr "" - -#: ../PLCGenerator.py:397 -#, python-brace-format -msgid "" -"Source signal has to be defined for single task '{a1}' in resource " -"'{a2}.{a3}'." -msgstr "" - -#: ../plcopen/iec_std.csv:23 -msgid "Square root (base 2)" -msgstr "" - -#: ../plcopen/definitions.py:48 -msgid "Standard function blocks" -msgstr "" - -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 -msgid "Start PLC" -msgstr "" - -#: ../ProjectController.py:1046 -#, python-format -msgid "Start build in %s\n" -msgstr "" - -#: ../ProjectController.py:1360 -msgid "Started" -msgstr "" - -#: ../ProjectController.py:1648 -msgid "Starting PLC\n" -msgstr "" - -#: ../BeremizIDE.py:365 -msgid "Status ToolBar" -msgstr "" - -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 -msgid "Step" -msgstr "" - -#: ../ProjectController.py:1846 -msgid "Stop" -msgstr "" - -#: ../Beremiz_service.py:264 -msgid "Stop PLC" -msgstr "" - -#: ../ProjectController.py:1848 -msgid "Stop Running PLC" -msgstr "" - -#: ../ProjectController.py:1361 -msgid "Stopped" -msgstr "" - -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 -msgid "Structure" -msgstr "" - -#: ../editors/DataTypeEditor.py:54 -msgid "Subrange" -msgstr "" - -#: ../plcopen/iec_std.csv:35 -msgid "Subtraction" -msgstr "" - -#: ../ProjectController.py:1085 -msgid "Successfully built.\n" -msgstr "" - -#: ../IDEFrame.py:447 -msgid "Switch perspective" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 -msgid "Syntax error in regular expression of pattern to search!" -msgstr "" - -#: ../dialogs/DiscoveryDialog.py:93 -msgid "TYPE" -msgstr "" - -#: ../plcopen/iec_std.csv:29 -msgid "Tangent" -msgstr "" - -#: ../editors/ResourceEditor.py:83 -msgid "Task" -msgstr "" - -#: ../editors/ResourceEditor.py:235 -msgid "Tasks:" -msgstr "" - -#: ../controls/VariablePanel.py:73 -msgid "Temp" -msgstr "" - -#: ../version.py:30 -msgid "" -"The best place to ask questions about Beremiz/PLCOpenEditor\n" -"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" -"\n" -"This is the main community support channel.\n" -"For posting it is required to be subscribed to the mailing list.\n" -"\n" -"You can subscribe to the list here:\n" -"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -msgstr "" - -#: ../editors/FileManagementPanel.py:180 -#, python-format -msgid "" -"The file '%s' already exist.\n" -"Do you want to replace it?" -msgstr "" - -#: ../editors/LDViewer.py:882 -msgid "The group of block must be coherent!" -msgstr "" - -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 -msgid "There are changes, do you want to save?" -msgstr "" - -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 -#, python-format -msgid "" -"There is a POU named \"%s\". This could cause a conflict. Do you wish to " -"continue?" -msgstr "" - -#: ../IDEFrame.py:1102 -msgid "" -"There was a problem printing.\n" -"Perhaps your current printer is not set correctly?" -msgstr "" - -#: ../editors/LDViewer.py:891 -msgid "This option isn't available yet!" -msgstr "" - -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 -#, python-format -msgid "Tick: %d" -msgstr "" - -#: ../plcopen/iec_std.csv:40 -msgid "Time" -msgstr "" - -#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 -msgid "Time addition" -msgstr "" - -#: ../plcopen/iec_std.csv:86 -msgid "Time concatenation" -msgstr "" - -#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 -msgid "Time division" -msgstr "" - -#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 -msgid "Time multiplication" -msgstr "" - -#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 -msgid "Time subtraction" -msgstr "" - -#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 -msgid "Time-of-day addition" -msgstr "" - -#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 -#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 -msgid "Time-of-day subtraction" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:172 -msgid "Toggle value" -msgstr "" - -#: ../editors/Viewer.py:548 -msgid "Top" -msgstr "" - -#: ../ProjectController.py:1855 -msgid "Transfer" -msgstr "" - -#: ../ProjectController.py:1857 -msgid "Transfer PLC" -msgstr "" - -#: ../ProjectController.py:1820 -msgid "Transfer completed successfully.\n" -msgstr "" - -#: ../ProjectController.py:1823 -msgid "Transfer failed\n" -msgstr "" - -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 -msgid "Transition" -msgstr "" - -#: ../PLCGenerator.py:1518 -#, python-format -msgid "" -"Transition \"%s\" body must contain an output variable or coil referring to " -"its name" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:84 -msgid "Transition Name" -msgstr "" - -#: ../dialogs/PouTransitionDialog.py:53 -msgid "Transition Name:" -msgstr "" - -#: ../PLCGenerator.py:1609 -#, python-brace-format -msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:1598 -#, python-brace-format -msgid "" -"Transition with content \"{a1}\" not connected to a previous step in " -"\"{a2}\" POU" -msgstr "" - -#: ../plcopen/plcopen.py:1323 -#, python-format -msgid "Transition with name %s doesn't exist!" -msgstr "" - -#: ../PLCControler.py:98 -msgid "Transitions" -msgstr "" - -#: ../dialogs/AboutDialog.py:131 -msgid "Translated by" -msgstr "" - -#: ../editors/ResourceEditor.py:68 -msgid "Triggering" -msgstr "" - -#: ../Beremiz_service.py:478 -msgid "Twisted unavailable." -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 -msgid "Type" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:49 -msgid "Type and derivated" -msgstr "" - -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 -#, python-format -msgid "Type conflict for location \"%s\"" -msgstr "" - -#: ../plcopen/iec_std.csv:16 -msgid "Type conversion" -msgstr "" - -#: ../editors/DataTypeEditor.py:162 -msgid "Type infos:" -msgstr "" - -#: ../dialogs/BrowseLocationsDialog.py:50 -msgid "Type strict" -msgstr "" - -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 -msgid "Type:" -msgstr "" - -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 -#, python-format -msgid "Unable to define PDO mapping for node %02x" -msgstr "" - -#: ../targets/Xenomai/__init__.py:39 -#, python-format -msgid "Unable to get Xenomai's %s \n" -msgstr "" - -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 -#, python-brace-format -msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" -msgstr "" - -#: ../PLCGenerator.py:254 -#, python-format -msgid "Undefined pou type \"%s\"" -msgstr "" - -#: ../IDEFrame.py:360 ../IDEFrame.py:421 -msgid "Undo" -msgstr "" - -#: ../ProjectController.py:423 -msgid "Unknown" -msgstr "" - -#: ../editors/Viewer.py:394 -#, python-format -msgid "Unknown variable \"%s\" for this POU!" -msgstr "" - -#: ../ProjectController.py:420 ../ProjectController.py:421 -msgid "Unnamed" -msgstr "" - -#: ../PLCControler.py:638 -#, python-format -msgid "Unnamed%d" -msgstr "" - -#: ../controls/VariablePanel.py:284 -#, python-format -msgid "Unrecognized data size \"%s\"" -msgstr "" - -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 -msgid "User Data Types" -msgstr "" - -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 -msgid "User Type" -msgstr "" - -#: ../PLCControler.py:97 -msgid "User-defined POUs" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:39 -msgid "Value" -msgstr "" - -#: ../editors/DataTypeEditor.py:259 -msgid "Values:" -msgstr "" - -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 -msgid "Variable" -msgstr "" - -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 -msgid "Variable Drop" -msgstr "" - -#: ../dialogs/FBDVariableDialog.py:64 -msgid "Variable Properties" -msgstr "" - -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 -msgid "Variable class" -msgstr "" - -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 -msgid "Variable don't belong to this POU!" -msgstr "" - -#: ../dialogs/LDElementDialog.py:89 -msgid "Variable:" -msgstr "" - -#: ../controls/VariablePanel.py:72 -msgid "Variables" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:152 -msgid "Vertical:" -msgstr "" - -#: ../Beremiz_service.py:588 -msgid "WAMP client startup failed. " -msgstr "" - -#: ../connectors/WAMP/__init__.py:91 -#, python-format -msgid "WAMP connecting to URL : %s\n" -msgstr "" - -#: ../connectors/WAMP/__init__.py:131 -msgid "WAMP connection timeout" -msgstr "" - -#: ../connectors/WAMP/__init__.py:150 -#, python-format -msgid "WAMP connection to '%s' failed.\n" -msgstr "" - -#: ../Beremiz_service.py:564 -msgid "WAMP import failed :" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:37 -msgid "WXGLADE GUI" -msgstr "" - -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 -msgid "Warning" -msgstr "" - -#: ../ProjectController.py:707 -msgid "Warnings in ST/IL/SFC code generator :\n" -msgstr "" - -#: ../dialogs/SearchInProjectDialog.py:78 -msgid "Whole Project" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:120 -msgid "Width:" -msgstr "" - -#: ../dialogs/FindInPouDialog.py:91 -msgid "Wrap search" -msgstr "" - -#: ../dialogs/AboutDialog.py:130 -msgid "Written by" -msgstr "" - -#: ../features.py:34 -msgid "WxGlade GUI" -msgstr "" - -#: ../svgui/svgui.py:142 -msgid "" -"You don't have write permissions.\n" -"Open Inkscape anyway ?" -msgstr "" - -#: ../wxglade_hmi/wxglade_hmi.py:154 -msgid "" -"You don't have write permissions.\n" -"Open wxGlade anyway ?" -msgstr "" - -#: ../ProjectController.py:371 -msgid "" -"You must have permission to work on the project\n" -"Work on a project copy ?" -msgstr "" - -#: ../editors/LDViewer.py:886 -msgid "" -"You must select the block or group of blocks around which a branch should be" -" added!" -msgstr "" - -#: ../editors/LDViewer.py:666 -msgid "You must select the wire where a contact should be added!" -msgstr "" - -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 -msgid "You must type a name!" -msgstr "" - -#: ../dialogs/ForceVariableDialog.py:193 -msgid "You must type a value!" -msgstr "" - -#: ../IDEFrame.py:438 -msgid "Zoom" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:155 -msgid "days" -msgstr "" - -#: ../PLCOpenEditor.py:343 -#, python-format -msgid "error: %s\n" -msgstr "" - -#: ../util/ProcessLogger.py:169 -#, python-brace-format -msgid "exited with status {a1} (pid {a2})\n" -msgstr "" - -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 -msgid "function" -msgstr "" - -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "" - -#: ../dialogs/PouDialog.py:32 -msgid "functionBlock" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:155 -msgid "hours" -msgstr "" - -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:157 -msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 -msgid "minutes" -msgstr "" - -#: ../dialogs/PouDialog.py:32 -msgid "program" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:156 -msgid "seconds" -msgstr "" - -#: ../plcopen/iec_std.csv:84 -msgid "string from the middle" -msgstr "" - -#: ../plcopen/iec_std.csv:82 -msgid "string left of" -msgstr "" - -#: ../plcopen/iec_std.csv:83 -msgid "string right of" -msgstr "" - -#: ../Beremiz.py:164 -msgid "update info unavailable." -msgstr "" - -#: ../PLCOpenEditor.py:341 -#, python-format -msgid "warning: %s\n" -msgstr "" - -#: ../PLCControler.py:972 -#, python-brace-format -msgid "{a1} \"{a2}\" can't be pasted as a {a3}." -msgstr "" - -#: ../ConfigTreeNode.py:56 -#, python-brace-format -msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" -"{a3}" -msgstr "" - -#: Extra XSD strings -msgid "CanFestivalSlaveNode" -msgstr "" - -msgid "CAN_Device" -msgstr "" - -msgid "CAN_Baudrate" -msgstr "" - -msgid "NodeId" -msgstr "" - -msgid "Sync_Align" -msgstr "" - -msgid "Sync_Align_Ratio" -msgstr "" - -msgid "CanFestivalNode" -msgstr "" - -msgid "Sync_TPDOs" -msgstr "" - -msgid "CanFestivalInstance" -msgstr "" - -msgid "CAN_Driver" -msgstr "" - -msgid "Generic" -msgstr "" - -msgid "Command" -msgstr "" - -msgid "Xenomai" -msgstr "" - -msgid "XenoConfig" -msgstr "" - -msgid "Compiler" -msgstr "" - -msgid "CFLAGS" -msgstr "" - -msgid "Linker" -msgstr "" - -msgid "LDFLAGS" -msgstr "" - -msgid "Linux" -msgstr "" - -msgid "Win32" -msgstr "" - -msgid "BaseParams" -msgstr "" - -msgid "IEC_Channel" -msgstr "" - -msgid "Enabled" -msgstr "" - -msgid "BeremizRoot" -msgstr "" - -msgid "TargetType" -msgstr "" - -msgid "Libraries" -msgstr "" - -msgid "URI_location" -msgstr "" - -msgid "Disable_Extensions" -msgstr "" - -msgid "%(codefile_name)s" -msgstr "" - -msgid "variables" -msgstr "" - -msgid "variable" -msgstr "" - -msgid "name" -msgstr "" - -msgid "type" -msgstr "" - -msgid "class" -msgstr "" - -msgid "initial" -msgstr "" - -msgid "desc" -msgstr "" - -msgid "onchange" -msgstr "" - -msgid "opts" -msgstr "" - -#: Extra TC6 documentation strings -msgid "0 - current time, 1 - load time from PDT" -msgstr "" - -msgid "Preset datetime" -msgstr "" - -msgid "Copy of IN" -msgstr "" - -msgid "Datetime, current or relative to PDT" -msgstr "" - -msgid "" -"The real time clock has many uses including time stamping, setting dates and" -" times of day in batch reports, in alarm messages and so on." -msgstr "" - -msgid "1 = integrate, 0 = hold" -msgstr "" - -msgid "Overriding reset" -msgstr "" - -msgid "Input variable" -msgstr "" - -msgid "Initial value" -msgstr "" - -msgid "Sampling period" -msgstr "" - -msgid "NOT R1" -msgstr "" - -msgid "Integrated output" -msgstr "" - -msgid "" -"The integral function block integrates the value of input XIN over time." -msgstr "" - -msgid "0 = reset" -msgstr "" - -msgid "Input to be differentiated" -msgstr "" - -msgid "Differentiated output" -msgstr "" - -msgid "" -"The derivative function block produces an output XOUT proportional to the " -"rate of change of the input XIN." -msgstr "" - -msgid "0 - manual , 1 - automatic" -msgstr "" - -msgid "Process variable" -msgstr "" - -msgid "Set point" -msgstr "" - -msgid "Manual output adjustment - Typically from transfer station" -msgstr "" - -msgid "Proportionality constant" -msgstr "" - -msgid "Reset time" -msgstr "" - -msgid "Derivative time constant" -msgstr "" - -msgid "PV - SP" -msgstr "" - -msgid "FB for integral term" -msgstr "" - -msgid "FB for derivative term" -msgstr "" - -msgid "" -"The PID (proportional, Integral, Derivative) function block provides the " -"classical three term controller for closed loop control." -msgstr "" - -msgid "0 - track X0, 1 - ramp to/track X1" -msgstr "" - -msgid "Ramp duration" -msgstr "" - -msgid "BUSY = 1 during ramping period" -msgstr "" - -msgid "Elapsed time of ramp" -msgstr "" - -msgid "The RAMP function block is modelled on example given in the standard." -msgstr "" - -msgid "" -"The hysteresis function block provides a hysteresis boolean output driven by" -" the difference of two floating point (REAL) inputs XIN1 and XIN2." -msgstr "" - -msgid "The SR bistable is a latch where the Set dominates." -msgstr "" - -msgid "The RS bistable is a latch where the Reset dominates." -msgstr "" - -msgid "" -"The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." -msgstr "" - -msgid "The output produces a single pulse when a rising edge is detected." -msgstr "" - -msgid "The output produces a single pulse when a falling edge is detected." -msgstr "" - -msgid "" -"The up-counter can be used to signal when a count has reached a maximum " -"value." -msgstr "" - -msgid "" -"The down-counter can be used to signal when a count has reached zero, on " -"counting down from a preset value." -msgstr "" - -msgid "" -"The up-down counter has two inputs CU and CD. It can be used to both count " -"up on one input and down on the other." -msgstr "" - -msgid "first input parameter" -msgstr "" - -msgid "second input parameter" -msgstr "" - -msgid "first output parameter" -msgstr "" - -msgid "second output parameter" -msgstr "" - -msgid "internal state: 0-reset, 1-counting, 2-set" -msgstr "" - -msgid "" -"The pulse timer can be used to generate output pulses of a given time " -"duration." -msgstr "" - -msgid "" -"The on-delay timer can be used to delay setting an output true, for fixed " -"period after an input becomes true." -msgstr "" - -msgid "" -"The off-delay timer can be used to delay setting an output false, for fixed " -"period after input goes false." -msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_ro_RO.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_ro_RO.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4018 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Emil Saracutu , 2018\n" +"Language-Team: Romanian (Romania) (https://www.transifex.com/beremiz/teams/75746/ro_RO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro_RO\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "Extern" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "Intrare" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "Local" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "Ieșire" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "Temporar" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "și%s" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "generare eșuată\n" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "\"%s\" Tipul de dată nu există !" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "" + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "" + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "" + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr "" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "" + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "" + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "" + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "" + +#: ../features.py:33 +msgid "C extension" +msgstr "" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "" + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "" + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "" + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "" + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "" + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "" + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" + +msgid "first input parameter" +msgstr "" + +msgid "second input parameter" +msgstr "" + +msgid "first output parameter" +msgstr "" + +msgid "second output parameter" +msgstr "" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_ru_RU.po --- a/i18n/Beremiz_ru_RU.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_ru_RU.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,17 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Andrey Skvortsov , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Andrey Skvortsov , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: zx_alexis , 2017\n" "Language-Team: Russian (Russia) (https://www.transifex.com/beremiz/teams/75746/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +18,7 @@ "Language: ru_RU\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -44,151 +43,156 @@ "\n" "Traceback:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " Внешний" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr " Вход/Выход" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr " Вход" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " Локальный" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr " Выход" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr " Временный" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" -msgstr "и %s" - -#: ../ProjectController.py:1151 +msgstr " и %s" + +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "неудачная генерация кода!\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "Тип данных \"%s\" не существует!!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "POU \"%s\" уже существует!!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "POU \"%s\" не найден!!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" не может использовать сам себя!!!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "Конфигурация \"%s\" уже существует!!!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "Конфигурация \"%s\" уже существует!!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "конфигурация \"%s\" не существует!!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "Тип данных \"%s\" уже существует!!!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "Элемент с именем \"%s\" уже существует в этом POU!!!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "Директория \"%s\" не является проектом Beremiz\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" является ключевым словом и не может быть использован!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" недопустимое значение!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" не является директорией!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" неверный идентификатор!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" -msgstr "\"%s\" используется более чем одним POU. Продолжить?" - -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +msgstr "\"%s\" используется одним или более POU. Продолжить?" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "POU \"%s\" уже существует!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "Шаг \"%s\" уже существует!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" значение уже задано!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" не является корректной размерностью для массива! " -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -197,200 +201,196 @@ "\"%s\" не является корректной размерностью массива! Правое значение должно " "быть больше левого." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "Функция \"{a1}\" не используется в POU \"{a2}\": входы не подключены" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" уже используется \"{a2}\"!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "Ресурс \"{a1}\" уже существует в конфигурации \"{a2}\"!!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "Ресурс \"{a1}\" отсутствует в конфигурации \"{a2}\"!!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gмс" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dд" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dч" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dм" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dмс" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%dc" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s типы данных" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POU" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s профиль" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "Тело %s не содержит экземпляров!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "Тело %s не содержит никакой текст!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Добавить элемент" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Закрыть" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&Конфигурация" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Типы данных" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Удалить" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Вид" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Редактировать" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Файл" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Функции" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Помощь" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Лицензия" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Программы" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Свойства" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&Недавние проекты" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Ресурсы" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}'- {a2} совпадений в проекте" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} совпадений в проекте" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' находится {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d совпадений)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr ", " - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr ". " - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- Выбирете тип URI -" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1 день" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1 час" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1 мин" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1 сек" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -399,9 +399,9 @@ "В POU присутствует элемент с именем \"%s\". Это может вызвать конфликт. " "Хотите продолжить?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "POU с именем \"%s\" уже существует!" @@ -411,26 +411,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Дочерний элемент с именем \"{a1}\" уже существует -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Необходимо выбрать размещение!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Задача с таким именем уже существует!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Переменная с именем \"%s\" уже существует в этом POU!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Переменная с именем \"%s\" уже существует!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "О программе" @@ -438,125 +438,125 @@ msgid "Absolute number" msgstr "Абсолютный номер" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Действие" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Блок действия" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Имя действия" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Имя действия:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "Действие с именем %s не существует!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Действия" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Действия:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Активный" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Добавить" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Добавить действие" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "Добавить C-код с синхронным доступом к локальным переменным" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Добавить конфигурацию" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Добавить тип данных" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Добавить ветвление" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "Добавить IP адрес" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "Добавить POU" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Добавить асинхронно вызываемый код на Python" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Добавить ресурс" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Добавить переход" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Добавить провод" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Добавить новый исходный шаг" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Добавить новый безусловный переход" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Добавить новый шаг" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Добавить простой GUI на WxGlade " -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Добавить действие" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Добавить элемент" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Добавить экземпляр" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Добавить слэйв" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Добавить задачу" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Добавить переменную" @@ -564,44 +564,44 @@ msgid "Addition" msgstr "Сложение" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "Дополнительные функциональные блоки" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Скорректировать размер элемента" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Выравнивание" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Все" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Все файлы (*.*)|*.*|CSV files (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Уже подключен. Пожалуйста, отключитесь сначала.\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Поле с именем \"%s\" уже существует в данной структуре!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Экземпляр задачи с таким именем уже существует!" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "Переименовать все цепи с тем же самым именем" @@ -621,8 +621,8 @@ msgid "Arithmetic" msgstr "Математика" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Массив" @@ -630,45 +630,37 @@ msgid "Assignment" msgstr "Присвоение" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Переменная или выражение должно быть выбрано!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Автор" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Имя автора (опционально):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Назад" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Неправильное доменное имя (ответ) в " - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Неправильное доменное имя в" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "Неправильный размер: %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Базовый тип:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Базовые типы" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -700,85 +692,85 @@ msgid "Bitwise inverting" msgstr "Битовое НЕ" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Блок" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Свойства блока" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Имя блока" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Низ" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "Ошибка" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "Просмотр %s значений библиотеки" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "Просмотр доступных МЭК-адресов" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "Сборка" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "Директория сборки уже пуста\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "Сборка проекта в директории сборки" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "Крэш во время сборки C-кода!\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "Ошибка сборки C-кода.\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "C код " -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "C-код успешно сгенерирован.\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "Ошибка компиляции.\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "Ошибка компиляции %s.\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "С-расширение" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "&Благодарности" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "Сеть CANOpen" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "CANOpen ведущий" @@ -786,34 +778,34 @@ msgid "CANopen support" msgstr "Поддержка CANOpen" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "Можно сгенерировать порядок исполнения только для FBD!" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "Можно задать адреса только локальным или глобальным переменным" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "Нельзя сгенерировать программу в файл %s!" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "Нельзя задать размещение для экземпляра функционального блока" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "Нельзя сохранить проект в файл %s!" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "Нельзя задать исходное значение экземпляру функционального блока" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "Нельзя создать дочерний элемент {a1} типа {a2}" @@ -823,15 +815,15 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "Не удалось найти свободный МЭК-канал с номером меньше, чем %d\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "Невозможно получить состояние ПЛК - ошибка подключения.\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "Не удалось открыть/прочитать VARIABLES.csv\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " @@ -840,31 +832,35 @@ "Невозможно установить битовое смещение для не булевой переменной '{a1}' " "(ID:{a2},Idx:{a3},sIdx:{a4}))" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "Передача запрещена во время работы ПЛК. Остановить?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "Регистрозависимый" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "Центр" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "Сменить IP-адрес интерфейса для привязки сокета" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Сменить имя" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "Сменить тип POU на" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "Сменить номер порта" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "Сменить рабочую директорию" @@ -872,116 +868,120 @@ msgid "Character string" msgstr "Строковые операции" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Выберите SVG-файл" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Выберите директорию, чтобы сохранить проект" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Выберите файл" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Выберите проект" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Выберите значение для %s:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Выберите рабочую директорию" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Выберите пустой каталог для проекта" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "Выбранная директория не содержит программы. Это некорректный проект!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" "Выбранная директория не пуста и не может использоваться для нового проекта!" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Класс" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Фильтр класса:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Класс:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Очистить" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Очистить лог" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Очистить директорию сборки проекта" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Очистка директории сборки\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Очистить ошибки" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Очистить порядок исполнения" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Закрыть" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Закрыть приложение" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Закрыть проект" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Закрыть вкладку" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Катушка" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Комментарий" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Поддержка сообщества" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Имя компании" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Компания (обязательно):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "Сайт компании (опционально):" @@ -989,7 +989,7 @@ msgid "Comparison" msgstr "Сравнение" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "Компиляция МЭК-программы в C-код...\n" @@ -997,93 +997,93 @@ msgid "Concatenation" msgstr "Объединение" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Конфигурация" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Конфигурационные переменные" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Конфигурация" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Конфигурации" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Подтвердить или поменять имя переменной" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Подключиться" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Подключиться к целевому ПЛК" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Подключен к URI: %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Подключение" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Свойства подключения" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "Подключение отменено!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "Неудачное подключение к %s!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Подключение прервано!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Неудачное подключение к %s!\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Коннектор" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Коннекторы:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Консоль" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Константа" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Контакт" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Описание содержимого (опционально):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Продолжение" @@ -1103,20 +1103,20 @@ msgid "Conversion to time-of-day" msgstr "Преобразование во время суток" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Копировать" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "Копировать POU" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Скопировать файл с левой директории в правую" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Скопировать файл с правой директории в левую" @@ -1124,7 +1124,7 @@ msgid "Cosine" msgstr "Косинус" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1133,12 +1133,12 @@ "Невозможно добавить дочерний элемент \"{a1}\", тип {a2}:\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Невозможно импортировать старый файл %s." -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1147,7 +1147,7 @@ "Невозможно загрузить базовые параметры confnode {a1}:\n" " {a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1156,111 +1156,107 @@ "Невозможно загрузить параметры confnode {a1}:\n" " {a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Невозможно вставить не-POU." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "Невозможно запустить ПЛК!\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "Невозможно остановить ПЛК!\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Невозможно остановить отладчик.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "Создать HMI" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Создать новый POU" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Создать новое действие" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Создать новый блок действие" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Создать новый блок" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Создать новое ветвление" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Создать новую катушку" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Создать новый комментарий" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Создать новое подключение" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Создать новый контакт" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Создать новое ветвление" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Создать новое ветвление или объединение" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Создать исходный шаг" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Создать новый безусловный переход" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Создать новую линию питания" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Создать новую цепь" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Создать новый шаг" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Создать новый переход" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Создать новую переменную" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Благодарности" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Текущая рабочая директория :" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Вырезать" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Циклический" @@ -1272,19 +1268,19 @@ msgid "DEPRECATED" msgstr "УСТАРЕЛО" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "Профиль DS-301" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "Профиль DS-302" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Тип данных" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Типы данных" @@ -1305,68 +1301,60 @@ msgid "Date subtraction" msgstr "Вычитание дат" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Дни:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Отлаживаемая программа не соответствует программе в ПЛК - " "остановите/загрузите/запустите, чтобы разрешить отладку\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Отладка экземпляра" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Отладка: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Отладка: неизвестная переменная '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Отладка: неподдерживамый отладкой тип '%s'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Отладчик" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Отладчик запрещен\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Отладчик готов\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Отладчик остановлен.\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Удалить" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Удалить ветвь" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "Удалить файл" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Удалить сегмент цепи" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Удалить" @@ -1374,47 +1362,47 @@ msgid "Deletion (within)" msgstr "Удаление подстроки" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "Механизм создания типа:" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "Описание" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Описание:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Размеры:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Направление" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Направление:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Синоним" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Отключиться" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Отключиться от ПЛК" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Отключено" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Ветвление" @@ -1422,121 +1410,121 @@ msgid "Division" msgstr "Деление" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Вы действительно хотите удалить этот файл '%s'?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Описание" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Завершено" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Длительность" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "Файлы EDS (*.eds)|*.eds|All files|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Редактировать блок" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Редактировать значение катушки" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Редактировать значение контакта" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Редактировать длительность" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Редактировать шаг" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "Редактировать WxWidgets GUI с помощью WXGlade" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Редактировать свойства блока действия" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Редактировать свойства массива" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Редактировать комментарий" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Редактировать файл" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Редактировать элемент" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Редактирование безусловного перехода" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" "Редактировать МЭК-код добавленный к коду сгенерированному PLCGenerator" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Редактировать имя шага" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Редактировать переход" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Редактор панели инструментов" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Редактор выделения" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Элементы:" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Нет программы" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Разрешить отмену и повтор операций" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Размер не должен быть нулевым" + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Введите имя" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Введите номер порта" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Введите IP-адрес используемого интерфейса" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Перечисление" @@ -1544,37 +1532,36 @@ msgid "Equal to" msgstr "Равно" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Ошибка" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" @@ -1582,49 +1569,58 @@ "Ошибка: Как минимум одна конфигурация и один ресурс должны быть " "задекларированы в ПЛК!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Ошибка: компилятор МЭК в C вернул код ошибки %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" "%s\n" msgstr "Ошибка в ST/IL/SFC кодогенераторе: %s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "Ошибка во время сохранения \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "Ошибка: неудачный экспорт ведомого\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" +"Ошибка: Modbus/IP сервера %{a1}.x и %{a2}.x используют один и тот же порт " +"{a3}.\n" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "Ошибка: мастер не сгенерирован\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "Ошибка: ПЛК не собран\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "Исключение во время подключения %s!\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "Управление исполнением:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Порядок исполнения:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "Экспериментальный WEB-HMI" @@ -1636,77 +1632,77 @@ msgid "Exponentiation" msgstr "Взятие экспоненты" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "Экспортировать CanOpen ведомое устройство в EDS файл" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "Экспортировать график значений в буфер обмена" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "Экспортировать ведомое устройство" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "Выражение:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "Внешний" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "Экспорт локальных переменных...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "Ошибка: необходима сборка перед передачей.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "Спадающий фронт" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "Ошибка: невозможно получить сборщик.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "Проверка %s" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "Поле %s имеет неверное значение!" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "Поля %s имеют неверные значения!" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "Файл '%s' уже существует!" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "Поиск" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "Поиск следующего" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "Поиск предыдущего" @@ -1714,93 +1710,90 @@ msgid "Find position" msgstr "Поиск позиции" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "Поиск:" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "Принудительный перезапуск системы исполнения\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "Форсировать значение" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "Форсировать значение переменной" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" -msgstr "Форма заполнена неполностью. %s должен быть заполнен!" - -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +msgstr "Форма заполнена не полностью. %s необходимо заполнить!" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" -msgstr "Форма заполнена неполностью. Имя должно быть заполнено!" - -#: ../dialogs/FBDBlockDialog.py:232 +msgstr "Форма заполнена не полностью. Имя должно быть заполнено!" + +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" -msgstr "Форма заполнена неполностью. Должен быть выбран корректный тип блока!" - -#: ../dialogs/FindInPouDialog.py:72 +msgstr "" +"Форма заполнена не полностью. Должен быть выбран корректный тип блока!" + +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "Вперед" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "Функция" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "Функциональный &блок" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "Функциональный блок" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "Типы функциональных блоков" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "Функциональные блоки" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "Функциональные блоки не могут использоваться в функциях!" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "Функциональный блок \"%s\" не может быть вставлен в функцию!!!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "Функции" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "Сгенерировать программу" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "Генерация МЭК-61131 ST/IL/SFC кода ПЛК...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "Глобальный" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "Перейти к текущему значению" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "Графика" @@ -1812,110 +1805,116 @@ msgid "Greater than or equal to" msgstr "Больше или равно" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "Шаг сетки:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "Порт HTTP-интерфейса :" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "Высота:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "Домашняя директория:" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "Горизонтальный:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "Часы:" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "IL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "Неверный IP-адрес" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "Импорт SVG" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "Вход/Выход" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" +"Входная/Выходная переменная {a1} в блоке {a2} в POU {a3} должна быть " +"подключена." + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "Неактивный" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "\"{a1}\" и \"{a2}\" имеют несовместимые типы данных" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "Несовместимый размер данных \"%s\" с типом \"BOOL\"" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "\"{a1}\" и \"{a2}\" имеют несовместимый размер данных" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Индикатор" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "Исходное значение" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "Исходный шаг" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "Исходное значение" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "Исходное значение:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "Непосредственно" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "Вход" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "Входы:" @@ -1923,64 +1922,72 @@ msgid "Insertion (into)" msgstr "Вставка подстроки" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "Экземпляр с id %d не существует!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "Экземпляры:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "Интерфейс" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "Прерывание" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "Интервал" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" +"Неверный URL!\n" +"Пожалуйста, введите корректный URL." + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "Некорректный PlcOpen элемент(ы)!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "Неправильный тип \"{a1}\"-> {a2} != {a3} для \"{a4}\"" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "Неверный тип \"{a1}\"-> {a2} != {a3} в функции \"{a4}\"" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Неправильный тип \"{a1}\"-> {a2} != {a3} для \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "Неверное значение \"%s\" для отлаживаемой переменной" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "Неверное значение \"%s\" для значения размещения переменной" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "Неверное значение \"%s\" для вставки в редактор" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "Неверное значение \"{a1}\" для переменной \"{a2}\"!" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1988,53 +1995,57 @@ "Неверное значение!\n" "Необходимо ввести числовое значение." -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "Безопасное подключение?" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Безусловный переход" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "Элемент лестничной диаграммы с id %d более чем на одной ступени." -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Язык" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Язык (опционально):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Язык:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" "Загружаемая программа совпадает с текущий программой в целевом ПЛК. Загрузка" " продолжена...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "Запустить WX GUI Inspector" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Запустить консоль Python" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Слева" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Левая шина питания" @@ -2050,11 +2061,11 @@ msgid "Less than or equal to" msgstr "Меньше либо равно" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Библиотеки" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Лицензия" @@ -2062,27 +2073,27 @@ msgid "Limitation" msgstr "Ограничение" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "Линковка:\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Локальный" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Локальные записи" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "Локальный сервис не найден!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "Адрес" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "Доступные адреса:" @@ -2090,12 +2101,12 @@ msgid "Logarithm to base 10" msgstr "Десятичный логарифм" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "MDNS разрешение неудачно для '%s'\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Отображение переменной" @@ -2103,11 +2114,15 @@ msgid "Map located variables over CANopen" msgstr "Отображение переменных по CANopen" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "Отображение переменных по Modbus" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Ведущий" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" @@ -2117,29 +2132,29 @@ msgid "Maximum" msgstr "Максимум" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Максимум:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Память" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "Меню" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Микросекунды:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Посередине" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Миллисекунды:" @@ -2147,23 +2162,27 @@ msgid "Minimum" msgstr "Минимум" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Минимум:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Минуты:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Прочее" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "Поддержка Modbus" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Модификатор:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " @@ -2172,55 +2191,55 @@ "Более одного коннектора соответствуют продолжению цепи \"{a1}\" в POU " "\"{a2}\"" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Переместить действие ниже" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Переместить действие выше" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Переместить ниже" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Переместить элемент ниже" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Переместить элементы выше" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Переместить экземпляр ниже" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Переместить экземпляр выше" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Переместить задачу ниже" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Переместить задачу выше" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Переместить отображение" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Переместить выше" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Переместить переменную ниже" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Переместить переменную выше" @@ -2232,26 +2251,26 @@ msgid "Multiplication" msgstr "Умножение" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Мой компьютер:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "Имя" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Имя" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Имя не может быть null!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Имя:" @@ -2259,46 +2278,46 @@ msgid "Natural logarithm" msgstr "Натуральный логарифм" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Инверсия" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " msgstr "Ошибка Web сервиса Nevow. " -#: ../Beremiz_service.py:556 +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" msgstr "Ошибка импорта Nevow/Athena :" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Новый" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Новый элемент" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "Нет модификатора" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "Нет ПЛК для передачи (была сборка успешна?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "Нет тела для POU \"%s\"" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "Не найден коннектор, соответствующий продолжению цепи \"{a1}\" в POU \"{a2}\"" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2306,60 +2325,60 @@ "Документация отсутствует.\n" "В разработке." -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "Не найдена информация по блоку \"%s\"" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "Выходная переменная {a1} не найдена в блоке {a2} в POU {a3}." -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "Ничего не найдено." -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "Нет такого SVG файла: %s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "Нет индекса/подиндекса ({a1},{a2}) (переменная {a3})" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "Нет индекса/подиндекса ({a1},{a2}) в ID: {a3} (переменная {a4})" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "Не выбрано допустимое значение!" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "Переменная не определена в POU \"%s\"" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "Несуществующий ID узла: {a1} (переменная {a2})" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "Не-Retain" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Обычный" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2369,7 +2388,7 @@ msgid "Not equal to" msgstr "Не равно" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Число ветвей:" @@ -2377,24 +2396,24 @@ msgid "Numerical" msgstr "Математические функции" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "При изменении" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Только элементы" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Открыть" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "Открыть Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." @@ -2403,67 +2422,67 @@ "из среды разработки программ по стандарту МЭК 61131 с постоянно " "расширяющимся набором плагинов и гибкой системой исполнения для ПЛК." -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "Открыть файловый менеджер для просмотра файлов проекта" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "Открыть wxGlade" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Квалификатор" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Настройки" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Организация (опционально):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Другой профиль" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Выход" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO приема" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO передачи" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "ПЛК:\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "Лог ПЛК" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "Неудачная генерация кода!\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "В ПЛК нет программы или он уже запущен." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "ПЛК незапущен." -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2472,15 +2491,15 @@ "Синтаксическая ошибка в строке {a1}:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen файлы (*.xml)|*.xml|All files|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2490,205 +2509,205 @@ "\n" "Beremiz — " -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "Порт" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "Имя POU" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "Имя POU:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "Тип POU" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "Тип POU:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "PYRO подключение к URI: %s\n" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO использует сертификаты в '%s'\n" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Настройки страницы" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Размер страницы (опционально):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Страница: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Родительский экземпляр" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Вставить" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "Вставить POU" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Шаблон поиска:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Номер пина:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Выберите цель перехода" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "Введите имя блока" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "Введите текст комментария" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "Введите имя шага" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "Введите текст" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "Введите значение для переменной \"%s\":" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "Номер порта должен быть в диапазоне от 0 до 65535!" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "Номер порта должен быть целым числом!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "Шина питания" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "Свойства шины питания" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "Просмотр" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "Просмотр:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Печать" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "Предварительный просмотр" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Приоритет" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Приоритет:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "Проблема запуска ПЛК: ошибка %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Имя продукта" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Имя продукта (обязательно):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "Релиз продукта (опционально):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "Версия продукта" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "Версия продукта (обязательно):" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Программа" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "Программа успешно сгенерирована!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Программы" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "Программы не могут использоваться другими POU!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Проект" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "Проект '%s':" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "Файлы проекта" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "Имя проекта" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "Имя проекта (обязательно):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "Версия проекта (опционально):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2696,90 +2715,90 @@ "Синтаксическая ошибка в файле проекта:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "Свойства проекта" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "Дерево проекта не соответствует confnode.xml {a1}!={a2} " -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "Для всей цепи" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "Свойства" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "Сервис доступен в локальной сети" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "Исключение Pyro: %s\n" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "URI для Pyro :" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "Порт Pyro :" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Код на python" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Python файл" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "Спецификатор" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "Выход" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "Диапазон:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "МЭК-код" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "Действительно удалить элемент '%s'?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "Realm:" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "Повторить" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "Ссылка" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "Обновить" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Регулярное выражение" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "Регулярные выражения" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "Освободить значение" @@ -2787,56 +2806,56 @@ msgid "Remainder (modulo)" msgstr "Остаток от деления (modulo)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "Удалить %s элемент" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "Удалить тип данных" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "Удалить POU" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "Удалить действие" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "Удалить элемент" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "Удалить файл из левой директории" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "Удалить экземпляр" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Удалить ведомое устройство" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "Удалить задачу" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "Удалить переменную" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "Переименовать" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "Заменить файл" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "Заменить цепь подключениями" @@ -2844,43 +2863,43 @@ msgid "Replacement (within)" msgstr "Замена подстроки" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "Сброс" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "Сбросить порядок исполнения" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "Сбросить представление" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "Сбросить результаты поиска" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Ресурсы" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "Retain" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "Возвращаемый тип:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "Право" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "Правая шина питания" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "Нарастающий фронт" @@ -2896,116 +2915,116 @@ msgid "Rounding up/down" msgstr "Округление вверх/вниз" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "Старт" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "Ошибка генерации C-кода для расширений ввода-вывода!\n" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "Ошибка генерации C-кода для библиотеки расширений системы исполнения!\n" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "SDO клиент" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "SDO сервер" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" "Безусловный переход в POU \"{a1}\" ссылается на несуществующий SFC шаг " "\"{a2}\"" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "SFC переход в POU \"%s\" должен быть подключен." -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST файлы (*.st)|*.st|Все файлы|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG файлы (*.svg)|*.svg|Все файлы|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Сохранить" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Сохранить как..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Сохранить как" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "Выбранный путь совпадает с путём проекта!\n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Область действия" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Поиск" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Поиск в проекте" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Секунды:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Выделить все" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Выберите класс переменной:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Выберите редактор:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Выберите экземпляр" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Выберите объект" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "Выбранная директория уже содержит другой проект. Перезаписать?\n" @@ -3013,23 +3032,23 @@ msgid "Selection" msgstr "Выбор" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "Альтернативное объединение" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "Альтернативное ветвление" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Поиск сервиса" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Доступные сервисы:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Установить" @@ -3041,27 +3060,27 @@ msgid "Shift right" msgstr "Сдвиг вправо" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "Показать код, сгенерированный PLCGenerator" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Показать ведущего" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Показать ведущий узел сгенерированный config_utils" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Показать код" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "Параллельное объединение" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "Параллельное ветвление" @@ -3069,15 +3088,15 @@ msgid "Sine" msgstr "Синус" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Источник" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "Исходные файлы не изменились, сборка не нужна.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3089,60 +3108,56 @@ msgid "Square root (base 2)" msgstr "Квадратный корень" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "Стандартные функциональные блоки" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "Запустить ПЛК" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Сборка запущена в %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Работа" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "ПЛК запускается\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Панель статуса" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Шаг" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Стоп" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "Остановить ПЛК" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Остановить запущенный ПЛК" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Стоп" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Остановка отладчика...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Структура" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Поддиапазон" @@ -3150,19 +3165,19 @@ msgid "Subtraction" msgstr "Вычитание" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Сборка прошла успешно.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "Сменить представление" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "Синтаксическая ошибка в регулярном выражении шаблона поиска!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "Тип" @@ -3170,19 +3185,19 @@ msgid "Tangent" msgstr "Тангенс" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Задача" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Задачи:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Временный" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3204,7 +3219,7 @@ "Вы можете подписаться на список рассылки здесь:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3213,15 +3228,15 @@ "Файл '%s' уже существует.\n" "Вы хотите заменить его?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "Группа блоков должна быть связанной!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Хотите сохранить изменения?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " @@ -3230,7 +3245,7 @@ "Существует POU с именем \"%s\". Это может вызвать конфликт. Хотите " "продолжить?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3238,11 +3253,11 @@ "Произошла проблема во время печати.\n" "Возможно, текущий принтер не настроен?" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Это опция еще не доступна!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "Цикл: %d" @@ -3280,36 +3295,36 @@ msgid "Time-of-day subtraction" msgstr "Вычитание времени суток" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "Переключить значение" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "Верх" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Передать" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "Передать ПЛК" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Передача успешно завершена.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Ошибка передачи\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Переход" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " @@ -3318,58 +3333,58 @@ "Тело перехода \"%s\" должно содержать выходную переменную или катушку, " "ссылающуюся на его имя" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "Имя перехода" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "Имя перехода:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "Переход с содержимым \"{a1}\" не подключен к следующему шагу в POU \"{a2}\"" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "Переход с содержимым \"{a1}\" не подключен к предыдущему шагу в POU \"{a2}\"" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "Переход с именем %s отсутствует!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "Переходы" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "Перевод" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "Запуск" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "Модуль Twisted недоступен." -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Тип" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "Тип и его производные" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "Конфликт типов для адреса \"%s\"" @@ -3378,179 +3393,233 @@ msgid "Type conversion" msgstr "Преобразование типов" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "Информация о типе:" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "Только данный тип" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Тип:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "Узел:" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "Порт:" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "Тип URI:" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "Невозможно определить отображение PDO для узла %02x" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "Невозможно получить Xenomai %s\n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "Неопределенный тип блока \"{a1}\" в POU \"{a2}\"" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "Неопределенный тип POU \"%s\"" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Отмена" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Неизвестно" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Неизвестная переменная \"%s\" для этого POU!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "Unnamed" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Unnamed%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Неопределенный размер данных \"%s\"" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Пользовательские типы данных" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "Пользовательский тип" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "Пользовательские POU" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Значение" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Значения:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Переменная" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "Перетаскивание переменной" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Свойства переменных" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Класс переменной" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "Переменная не принадлежит этому POU!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Переменная:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Переменные" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Вертикальный:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "Неудачное подключение WAMP (%s) .. повтор .." + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "WAMP соединение потеряно (%s) .. переподключение .." + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "WAMP ID:" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "WAMP клиент подключается к :" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "Не удалось выполнить WAMP подключение!" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "Ошибка импорта WAMP. " -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "Неполная конфигурация WAMP." + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "Конфигурация WAMP отсутствует." + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "WAMP подключение к URI: %s\n" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "Тайм-аут WAMP подключения " -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "Не удалось установить WAMP подключение к %s.\n" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "Ошибка импорта WAMP :" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "Ошибка загрузки WAMP:" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "Завершение сеанса WAMP" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "Ошибка загрузки секретной информации Wamp:" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Предупреждение" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Предупреждения в ST/IL/SFC коде генераторе:\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Весь проект" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Ширина:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "Продолжить поиск сначала" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Авторы" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3558,7 +3627,7 @@ "У вас недостаточно прав для записи.\n" "Открыть Inkscape все равно?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3566,7 +3635,7 @@ "У вас недостаточно прав для записи.\n" "Открыть wxGlade все равно?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3574,80 +3643,72 @@ "Вы должны иметь права на запись, чтобы работать с проектом\n" "Работать с копией проекта?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "" "Выберите блок или группу блоков, вокруг которых нужно добавить ветвление!" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "Выберите провод, куда должен быть добавлен контакт!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "Введите имя!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "Введите значение!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "Приближение" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "дни" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "ошибка: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "завершился с кодом {a1} (pid {a2})\n" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "файл:" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "функция" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "функция: " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "функциональный блок" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "часы" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "строка:" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "Установка matiec не найдена\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "милисекунды" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "минуты" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "программа" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "секунды" @@ -3663,28 +3724,26 @@ msgid "string right of" msgstr "строка справа от " -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "информация об обновлениях недоступна." -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "предупреждение: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "{a1} \"{a2}\" не может быть вставлен как {a3}." -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" -msgstr "" -"{a1} XML файл не следует XSD-схеме в строке {a2}:\n" -"{a3}" +msgstr "{a1} Файл XML не соответствует XSD-схеме в строке {a2}:{a3}" #: Extra XSD strings msgid "CanFestivalSlaveNode" @@ -3747,6 +3806,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "Запрос Modbus" + +msgid "SlaveID" +msgstr "Адрес устройства" + +msgid "Nr_of_Channels" +msgstr "Число каналов" + +msgid "Start_Address" +msgstr "Начальный адрес" + +msgid "Timeout_in_ms" +msgstr "Таймаут, мс" + +msgid "MemoryArea" +msgstr "Область памяти" + +msgid "MemoryAreaType" +msgstr "Тип области памяти" + +msgid "ModbusTCPclient" +msgstr "Modbus/TCP Master" + +msgid "Remote_IP_Address" +msgstr "IP адрес" + +msgid "Remote_Port_Number" +msgstr "TCP порт" + +msgid "Invocation_Rate_in_ms" +msgstr "Период опроса, мс" + +msgid "ModbusServerNode" +msgstr "Modbus/TCP Slave" + +msgid "Local_IP_Address" +msgstr "IP адрес" + +msgid "Local_Port_Number" +msgstr "TCP порт" + +msgid "ModbusRTUclient" +msgstr "Modbus/RTU Master" + +msgid "Serial_Port" +msgstr "Последовательный порт" + +msgid "Baud_Rate" +msgstr "Скорость" + +msgid "Parity" +msgstr "Чётность" + +msgid "Stop_Bits" +msgstr "Стоп-биты" + +msgid "ModbusRTUslave" +msgstr "Modbus/RTU Slave" + +msgid "ModbusRoot" +msgstr "Modbus" + +msgid "MaxRemoteTCPclients" +msgstr "Максимальное количество TCP клиентов" + msgid "BaseParams" msgstr "Базовые параметры" @@ -3931,10 +4056,10 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." -msgstr "" -"Семафор предоставляет собой программный механизм синхронизации для " -"обеспечения исключительного доступа к определенным ресурсам." +"exclusive access to certain resources." +msgstr "" +"Семафоры обеспечивают механизм эксклюзивного использования ресурсов частями " +"приложения" msgid "The output produces a single pulse when a rising edge is detected." msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_sl_SI.po --- a/i18n/Beremiz_sl_SI.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_sl_SI.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,18 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Janez Pregelj , 2017 -# Smarteh Smarteh , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Smarteh Smarteh , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Andrey Skvortsov , 2018\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/beremiz/teams/75746/sl_SI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +18,7 @@ "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -45,151 +43,156 @@ "\n" "Izvor:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr "Zunanji" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr "Vhod-Izhod" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr "Vhod" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr "Lokalni" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr "Izhod" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "Začasni" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr " in %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "ustvarjanje prekinjeno !\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "Podatkovni tip \"%s\" ne obstaja !!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "POU \"%s\" že obstaja !!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "POU \"%s\" ne obstaja!!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" ne morem uporabiti sebe!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" konfiguracija že obstaja !" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "\"%s\" konfiguracija že obstaja !!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "\"%s\" konfiguracija ne obstaja !!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "Podatkovni tip \"%s\" že obstaja!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "Element \"%s\" tega POU že obstaja!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "Mapa \"%s\" ni veljaven Beremiz projekt\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "Beseda \"%s\" je rezervirana beseda in se ne more uporabit!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\" je neveljavna vrednost!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" ni veljavna mapa!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" ni veljavena označba!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "\"%s\" je uporabljen v ene ali več POU. Želiš nadaljevati?" -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "POU \"%s\" že obstaja!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "Korak \"%s\" že obstaja!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "Vrednost \"%s\" je že definirana!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" vrednost ni veljavna dimenzija tabele!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -198,200 +201,196 @@ "\"%s\" vrednost ni veljavna dimenzija tabele!\n" "Desna vrednost mora biti večja od leve vrednosti." -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "Funkcija \"{a1}\" je bila preklicana v POU \"{a2}\": Nobeden vhod ni povezan" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" je že uporabljen v \"{a2}\"!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "Vir \"{a1}\" že obstaja v konfiguraciji \"{a2}\" !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "Vir \"{a1}\" ne obstaja v konfiguraciji \"{a2}\" !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dd" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%ds" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "Podatkovni tipi %s " -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POU-ji" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s profil" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "Telo %s nima Primerkov!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%s telo nima besedila!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&Dodaj Element" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&Zapri" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "%Konfiguracija" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&Podatkovni tip" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&Pobriši" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&Prikaži" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&Uredi" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&Datoteka" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&Funkcija" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&Pomoč" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&Licenca" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&Program" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&Lastnosti" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&Nedavni Projekti" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&Vir" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} ujema v Projektu" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} ujema v Projektu" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' je najden v {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d ujemanj)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr "," - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr "." - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1d" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1h" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " @@ -400,9 +399,9 @@ "POU že ima element poimenovan \"%s\". To lahko povzroči težave. Ali želiš " "nadaljevati?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "POU z imenom \"%s\" že obstaja!" @@ -412,26 +411,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "Otrok z imenom \"{a1}\" že obstaja -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "Lokacija mora biti izbrana!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "Opravilo z enakim imenom že obstaja!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "Spremenljivka z imenom \"%s\" že obstaja v tem POU!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "Spremenljivka z imenom \"%s\" že obstaja!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "O programu" @@ -439,125 +438,125 @@ msgid "Absolute number" msgstr "Absolutna številka" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Akcija" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "Akcijski blok" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "Ime Akcije" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "Ime Akcije:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "Akcija z imenom %s ne obstaja!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "Akcije" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "Akcije:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "Aktiven" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "Dodaj" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "Dodaj Akcijo" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "Dodaj C programsko kodo z sočasnim dostopom do lokalnih spremenljivk" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "Dodaj Konfiguracijo" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "Dodaj Podatkovni tip" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "Dodaj Razhajališče" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "Dodaj IP" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "Dodaj POU" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "Dodaj Python programsko koda, ki se izvaja asinhrono" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "Dodaj Vir" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "Dodaj Prehod" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "Dodaj odsek žice" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "Dodaj začetni skok" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Dodaj nov skok" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "Dodaj nov korak" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "Dodaj enostaven WxGlade GUI." -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "Dodaj Akcijo" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "Dodaj ELEMENT" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "Dodaj Primerek" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Dodaj podrejeno napravo" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "Dodaj Opravilo" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "Dodaj spremenljivko!" @@ -565,44 +564,44 @@ msgid "Addition" msgstr "Dodajanje" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "Dodatni funkcijski bloki" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "Nastavi velikost bloka" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "Poravnava" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "Vse" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "Vse datoteke (*.*)|*.*|CSV datoteke (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "Že povezan. Prosim najprej prekini\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "Element z imenom \"%s\" že obstaja v tej strukturi!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "Primerek z enakim imenom že obstaja" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "Uveljavi spremembo imena za vse nadaljnje objekte z enakim imenom" @@ -622,8 +621,8 @@ msgid "Arithmetic" msgstr "Aritmetičen" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "Tabela" @@ -631,45 +630,37 @@ msgid "Assignment" msgstr "Prireditev" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "Vsaj ena spremenljivka ali logični izraz mora biti izbran!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "Avtor" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "Avtorjevo ime (ni obvezno):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Nazaj" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "Napačno domensko ime (krožno) na " - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "Napačno domensko ime na " - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "Nepravilna velikost lokacije : %s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "Osnovni Tip:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "Osnovni Tipi" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -701,85 +692,85 @@ msgid "Bitwise inverting" msgstr "Bitni invertiranje" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "Blok" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "Lastnosti bloka" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "Ime bloka" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "Spodaj" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "Prekinjen" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "Razišči %s vrednosti v knjižnici" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "Razišči lokacije" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "Gradnja" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "Projektna mapa - gradnje je že bila očiščena\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "Gradnja projekta v mapo projekta - gradnje" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "Gradnja C programske kode ni uspela !\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "Gradnja C programske kode neuspešna.\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "C programska koda" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "C programska koda uspešno ustvarjena.\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "Generiranje C programske kode ni uspelo.\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr "Generiranje C programske kode %s ni uspelo.\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "C razširitev" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "Zasluge C&" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "CANOpen mreža" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "CANOpen podrejena naprava" @@ -787,34 +778,34 @@ msgid "CANopen support" msgstr "CANopen podpora" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "Lahko ustvarim vrstni red izvajanja le za FBD stavke!" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "Lokacijo lahko določiš le lokalni ali globalni spremenljivki." -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "Ne morem ustvariti programa v datoteko %s!" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "Ne morem dodeliti lokacije Primerku funkcijskega bloka" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "Ne morem shraniti projekt v datoteko %s!" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "Ne morem dodeliti začetne vrednosti Primerku funkcijskega bloka" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "Ne morem ustvariti otroka {a1} tipa {a2} " @@ -824,15 +815,15 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "Ne morem najti nižjega IEC kanala kot je %d\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "Ne morem pridobiti status krmilnika - povezava prekinjena.\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "Ne morem odpreti/razvozlati VARIABLES.csv!\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " @@ -841,31 +832,35 @@ "Ne morem nastaviti bit offset za nebitno '{a1}' spremenljivko " "(ID:{a2},Idx:{a3},sIdx:{a4}))" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "Razlikovanje velikih in malih črk" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "Sredinsko" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "Spremeni IP vmesnika za povezavo" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "Spremeni ime" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "Spremeni tip POU v" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "Spremeni številko vrat" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "Spremeni delovno mapo" @@ -873,115 +868,119 @@ msgid "Character string" msgstr "Niz znakov" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "Izberi SVG datoteko" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "Izberi mapo za shranjevanje projekta" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Izberi datoteko" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "Izberi projekt" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "Izberi vrednost za %s:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "Izberi delovno mapo" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "Izberi prazno mapo za nov projekt" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "Izbrana mapa ne vsebuje programa. Ni veljaven projekt!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "Mapa ni prazna. Ne morem uporabiti za nov projekt!" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "Razred" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "Filter Razreda:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "Razred:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "Počisti" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "Počisti dnevniška sporočila" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "Počisti projektno mapo - gradnje" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "Čistim projektno mapo - gradnje\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "Počisti napake" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "Počisti vrstni red izvajanja" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "Zapri" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Zapri program" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "Zapri projekt" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "Zapri zavihek" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "Tuljava" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Komentar" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Podpora skupnosti" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "Ime podjetja" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "Ime podjetja (obvezno)" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "Spletn stran podjetja (ni obvezno):" @@ -989,7 +988,7 @@ msgid "Comparison" msgstr "Primerjava" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "Prevajam IEC program v C programsko kodo...\n" @@ -997,93 +996,93 @@ msgid "Concatenation" msgstr "Združevanje" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "Konfiguracija" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "Konfiguracijske spremenljivke" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "Konfiguracija" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "Konfiguracije" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "Potrdi ali spremeni ime spremenljivke" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "Poveži" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "Poveži na krmilnik" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "Povezan na URI: %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "Povezava" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "Lastnosti povezave" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "Povezava prekinjena!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "Povezava do %s prekinjena!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "Povezava prekinjena!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Povezava na %s' ni bila uspešna.\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "Konektor-vhod" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "Konektor-vhodi:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "Konzola" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "Konstanta" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "Kontakt" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "Opis vsebine (ni obvezno):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "Nadaljevanje" @@ -1103,20 +1102,20 @@ msgid "Conversion to time-of-day" msgstr "Pretvorba v čas-dneva" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "Kopiraj" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "Kopiraj POU" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "Kopiraj datoteko iz leve mape v desno" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "Kopiraj datoteko iz desne mape v levo" @@ -1124,7 +1123,7 @@ msgid "Cosine" msgstr "Kosinus" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1133,12 +1132,12 @@ "Ne morem dodati otroka \"{a1}\", tip {a2} :\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "Ne morem uvoziti staro datoteko %s ." -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1147,7 +1146,7 @@ "Ne morem naložiti confnode osnovne parametre {a1} :\n" " {a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1156,111 +1155,107 @@ "Ne moreme naložiti confnode parametre {a1} :\n" " {a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Prilepim lahko samo objekte tipa POU." -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "Ne morem zagnati krmilnik !\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "Ne morem ustaviti krmilnika !\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "Ne morem ustaviti razhroščevalnik.\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "Kreiraj HMI" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "Ustvari nov POU" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "Ustvari novo Akcijo" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "Ustvari nov Akcijski blok" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "Ustvari nov blok" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "Ustvari nov skok" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "Ustvari novo tuljavo" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "Ustvari nov komentar" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "Ustvari novo povezavo" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "Ustvari nov kontakt" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "Ustvari novo Razhajališče" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "Ustvari novo Razhajališče ali Stekališče" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "Ustvari nov začetni korak" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "Ustvari nov skok" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "Ustvari nov napajalni vodnik" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "Ustvari novo prečko" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "Ustvari nov Korak" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "Ustvari nov prehod" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "Ustvari novo spremenljivko" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Zasluge" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "Trenutna delovna mapa :" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "Izreži" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "Cikličen" @@ -1272,19 +1267,19 @@ msgid "DEPRECATED" msgstr "OPUŠČENO" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "DS-301 Profile" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "DS-302 Profile" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "Podatkovni tip" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "Podatkovni tipi" @@ -1305,68 +1300,60 @@ msgid "Date subtraction" msgstr "Odštevanje Datuma" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "Dnevi:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" "Razhroščevalnik in krmilnik nimata enakega programa - Izvedi " "Ustavi/Prenos/Zaženi za ponovno omogočanje razhroščevalnika\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "Razhroščevalnik Primerka" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "Razhroščevalnik: %s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Razhroščevalnik: Neznana spremenljivka '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Razhroščevalnik: Nepodprti podatkovni tip '%s'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "Razhroščevalnik" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "Razhroščevalnik onemogočen\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "Razhroščevalnik pripravljen\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "Razhroščevalnik ustavljen..\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "Izbriši" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "Izbriši Razhajališče" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "Izbriši datoteko" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "Pobriši odsek žice" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "Izbriši element" @@ -1374,47 +1361,47 @@ msgid "Deletion (within)" msgstr "Izbriši (znotraj)" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "Izpeljani podatkovni tip:" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "Opis" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "Opis:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "Dimenzije:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "Smer" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "Smer:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "Direkten" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "Prekini" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "Prekini povezavo do krmilnika" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "Prekinjen" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "Razhajališče" @@ -1422,120 +1409,120 @@ msgid "Division" msgstr "Deljenje" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Ali res želiš izbrisati datoteko '%s'?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "Dokumentacija" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "Končano" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Čas trajanja" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS datoteke (*.eds)|*.eds|Vse datoteke|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "Uredi Blok" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "Uredi vrednost Tuljave" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "Uredi vrednost Kontakta" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "Uredi čas trajanja" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "Uredi Korak" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "Uredi WxWidgets GUI z WXGlade" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "Uredi lastnosti Akcijskega bloka" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "Uredi lastnosti tipa tabele" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "Uredi komentar" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "Uredi datoteko" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "Uredi element" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "Nastavi Skok na kateri Korak" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "Urejanje čiste IEC programske kode je bilo dodano PLCGenerator-ju" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "Uredi ime koroka" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "Uredi ime prehoda" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "Urejevalnik orodne vrrstice" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "Izbira urejevalnika" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "Elementi :" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "Prazen" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "Omogoči Razveljavi/Ponovi" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "Prazna dimenzija ni dovoljena." + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "Vstavi ime" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "Vnesi števiko vrat" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "Vnesi IP vmesnika za povezavo" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Naštevni" @@ -1543,49 +1530,48 @@ msgid "Equal to" msgstr "Enak" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "Napaka" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "" "Napaka: V krmilniku mora biti definirana vsaj ena Konfiguracija in Vir!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Napaka: Prevajalnik IEC v C programsko kodo je vrnil napako %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1594,37 +1580,44 @@ "Napaka v ST/IL/SFC ustvarjalniku programske kode :\n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "Napaka pri shranjevanju \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "Napaka: Izvoz podrejene naprave ni uspešen\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "Napaka: Ni bil ustvarjena nadrejena naprava\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "Napaka: Program za krmilnik ni bil generiran\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "Izjemna napaka pri povezovanju na %s!\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "Nadzor izvajanja:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Vrstni red izvajanja:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "Preizkusni spletni HMI" @@ -1636,77 +1629,77 @@ msgid "Exponentiation" msgstr "Potenciranje" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "Izvoz CanOpen podrejene naprave v EDS datoteko" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "Izvozi vrednosti grafa v Odlagališče" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "Izvozi podrejeno napravo" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "Logičen izraz:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "Zunanji" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "Povzemam locirane spremenjljivke...\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "Nauspešno: Potrebno zfraditi programsko kodo pred prenosom.\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "Negativna fronta" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "Usodna napaka: ne morem najti programa za izgradnjo.\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "Prejemam %s" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "Polje %s nima veljavne vrednosti!" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "Polja %s nimajo veljavne vrednosti!" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "Datoteka '%s' že obstaja!" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "Išči" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "Išči naslednjega" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "Išči prejšnjega" @@ -1714,93 +1707,89 @@ msgid "Find position" msgstr "Išči pozicijo" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "Išči:" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "Ponovno naloži izvajanje kode\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "Vsili vrednost" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "Vsili vrednost spremenljivke" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "Obrazec ni dokončan! . %s mora biti vpisano!" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "Obrazec ni dokončan! Ime mora biti vpisano!" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "Obrazec ni dokončan! Izbran mora biti veljaven Tip bloka!" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "Naprej" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "Funkcija" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "Funkcijski &Blok" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "Funkcijski blok" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "Tipi funkcijskih blokov" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "Funkcijski bloki" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "Funkcijski blok ne more biti uporabljen v funkcijah" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "Funkcijski blok \"%s\" ne more biti prilepljen v Funkcijo!!!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "Funkcije" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "Ustvari Program" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "Generiram SoftPLC IEC-61131 ST/IL/SFC programsko kodo...\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "Globalen" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "Pojdi na trenutno vrednost" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "Grafika" @@ -1812,110 +1801,114 @@ msgid "Greater than or equal to" msgstr "Večji kot ali enak" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "Resolucija mreže:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "HTTP vmesnik - številka vrat :" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "Višina:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "Domači direktorij:" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "Horizontalno:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "Ure:" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "IL" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "IP naslov ni veljaven!" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "Uvoz SVG" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "Vhod-Izhod" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "Neaktiven" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "Podatkovna tipa \"{a1}\" in \"{a2}\" sta med seboj nezdružljiva" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "Neprimerljiva velikost podatkov med \"%s\" and \"BOOL\"" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "Neprimerljiva velikost podatkov med \"{a1}\" in \"{a2}\"" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Indikator" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "Začetni" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "Začetni korak" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "Začetna vrednost" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "Začetna vrednost:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "Vstavljen" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "Vhod" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "Vhodi:" @@ -1923,64 +1916,70 @@ msgid "Insertion (into)" msgstr "Vstavljanje ( v ) " -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "Primerek z oznako %d ne obstaja!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "Primerki:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "Vmesnik" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "Prekinitev" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "Interval" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "Neveljavni plcopen element(-i)!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{a4}\"" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{a4}\"" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "Neveljavna vrednost \"%s\" za razhroščevalno spremenljivko" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "Neveljavna vrednost \"%s\" za element liste spremenljivk" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "Neveljavna vrednost \"%s\" za pogled bloka" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "Neveljavna vrednost \"{a1}\" za spremenljivko \"{a2}\" !" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1988,53 +1987,57 @@ "Neveljavna vrednost!\n" "Vnesti moraš numerično vrednost." -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "Skok" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "LD" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "Lestvični element z oznako %d je uporabljen več kot v eni prečki." -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "Jezik" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "Jezik (ni obvezno):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "Jezik:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" "Zadnji gradnja projekta že ustreza izbranemu krmilniku. Izvajam ponovno " "prenašanje...\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "Odpri WX GUI nadzor izvajanja" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "Odpri Python lupino" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "Levo" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "Levi napajalni vodnik" @@ -2050,11 +2053,11 @@ msgid "Less than or equal to" msgstr "Manj kot ali enak" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "Knjižnica" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "Licenca" @@ -2062,27 +2065,27 @@ msgid "Limitation" msgstr "Omejitve" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "Povezovanje :\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "Lokalni" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "Lokalni vpisi" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "Pregled lokalnih storitev ni uspelo!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "Lokacija" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "Razpoložljive lokacije:" @@ -2090,12 +2093,12 @@ msgid "Logarithm to base 10" msgstr "Logaritem osnova 10" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "Napaka MDNS razpoznave za '%s'\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Preslikava spremenljivke" @@ -2103,11 +2106,15 @@ msgid "Map located variables over CANopen" msgstr "Preslikaj najdeno spremenljivko na CANopen" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "Nadrejena naprava" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "Maksimalno število ({a1}) doseženo za confnode tipa {a2} " @@ -2116,29 +2123,29 @@ msgid "Maximum" msgstr "Maksimum" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "Maksimum" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "Spomin" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "Meni orodna vrstica" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "Mikrosekunde:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "Sredina" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "Milisekunde:" @@ -2146,23 +2153,27 @@ msgid "Minimum" msgstr "Minimum" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "Minimum:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "Minute:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "Razno" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "Modifikator:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " @@ -2171,55 +2182,55 @@ "Najden več kot en Konektor-vhod, ki ustreza \"{a1}\" Konektor-izhodu v " "\"{a2}\" POU" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "Premakni Akcijo navzdol" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "Premakni Akcijo navzgor" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "Premakni navzdol" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "Premakni element navzdol" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "Premakni element navzgor" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "Premakni Primerek navzdol" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "Premakni Primerek navzgor" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "Premakni Opravilo navzdol" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "Premakni Opravilo navzgor" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "Premakni pogled" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "Premakni navzgor" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "Premakni spremenljivko navzdol" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "Premakni spremenljivko navzgor" @@ -2231,26 +2242,26 @@ msgid "Multiplication" msgstr "Množenje" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "Moj računalnik:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NAME" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Ime" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "Ime ne sme biti prazno!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "Ime:" @@ -2258,48 +2269,48 @@ msgid "Natural logarithm" msgstr "Naravni logaritem" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "Negiran" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " msgstr "Storitev Nevow Web ni uspešna. " -#: ../Beremiz_service.py:556 +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" msgstr "Uvoz Nevow/Athena ni uspešen :" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "Nov" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "Nov element" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "Ni modifikator" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "Ni programa za prenos na krmilnik (je bila gradnja projekta uspešna?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "Ni definirana vsebina POU \"%s\"" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" "Ni bil najden Konektor-vhod, ki ustreza \"{a1}\" Konektor-izhodu \"{a2}\" " "POU" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2307,12 +2318,12 @@ "Dokumentacija ni na voljo.\n" "Pride kmalu." -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "Ni informacij za \"%s\" blok" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " @@ -2321,50 +2332,50 @@ "Nisem našel izhodne spremenljivke {a1} v bloku {a2} znotraj POU {a3}. " "Povezava mora biti prekinjena" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "Ni rezultata iskanja." -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "Ni take SVG datoteke: %s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "Ni take kombinacije index/subindex ({a1},{a2}) (spremenljivka {a3})" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" "Ni takege kombinacije index/subindex ({a1},{a2}) in ID : {a3} (spremenljivka" " {a4})" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "Izbrana napačna vrednost!" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "Ni definiranih spremenljivk v POU \"%s\"" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "Ne obstaja element z oznako : {a1} (spremenljivka {a2})" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "Ne-obdrži v spominu" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "Normal" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" @@ -2374,7 +2385,7 @@ msgid "Not equal to" msgstr "Ni enako " -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Število sekvenc:" @@ -2382,24 +2393,24 @@ msgid "Numerical" msgstr "Numeričen" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "Na spremembo" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "Samo Elementi" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "Odpri" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "Odpri Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." @@ -2407,67 +2418,67 @@ "Odprtokodno ogrodje za avtomatizacijo, povzeto po standardu IEC 61131 z " "nepretrgano rastjo razširitev na prilagodljivo izvajalno kodo za krmilnike." -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "Odpri Urejevalnik datotek za upravljanje z projektnimi datotekami" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "Odpri wxGlade" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "Nastavitev" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "Nastavitve" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "Organizacija (ni obvezno):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "Drugi Profil" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "Izhod" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO Sprejem" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO oddaja" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "Krmilnik :\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "Dnevnik krmilnika" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "Ustvarjanje kode krmilnika neuspešno !\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "Krmilnik je prazen ali že deluje." -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "Krmilnik ni zagnan." -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2476,15 +2487,15 @@ "Krmilniška sintaktična napaka v vrstici {a1}:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen datoteke (*.xml)|*.xml|Vse datoteke|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpenEditor" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2494,205 +2505,205 @@ "\n" "Beremiz je " -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "VRATA" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "Ime POU" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "Ime POU:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "Tip POU" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "Tip POU:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "PYRO povezuje na URI : %s\n" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO uporablja certifikate v '%s' \n" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "Nastavitev strani" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "Velikost strani (ni obvezno):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "Stran: %d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "Starš Primerka" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "Prilepi" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "Prilepi POU" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "Vzorec za iskanje:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "Številka prečke:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Prosim izberi ciljni krmilnik" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "Prosim vnesi ime bloka" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "Prosim vnesi komentar" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "Prosim vnesi ime koraka" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "Prosim vnesi besedilo" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "Prosim vnesi vrednost za spremenljivko \"%s\" :" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "Številka vrat mora biti med 0 <= številka vrat <= 65535!" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "Številka vrat mora biti celoštevilčna!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "Napajalni vodnik" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "Lastnosti napajalnega vodnika" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "Predogled" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "Predogled:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "Natisni" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "Predogled tiskanja" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "Prioriteta" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "Prioriteta:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "Napaka pri zagonu krmilnika: %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "Ime Produkta" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "Ime Produkta (obvezno)" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "Izdaja Produkta (ni obvezno):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "Verzija Produkta" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "Verzija produkta (obvezno)" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "Program" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "Program je bil uspešno ustvarjen!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "Programi" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "Programi ne morejo biti uporabljeni v drugih POU!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "Projekt" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "Projekt '%s':" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "Projektne datoteke" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "Ime projekta" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "Ime projekta (obvezno):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "Verzija projekta (ni obvezno):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2700,90 +2711,90 @@ "Sintaktična napaka v imenu Projektne datoteke:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "Lastnosti Projekta" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "Drevesna struktura Projekta ne ustreza confnode.xml {a1}!={a2} " -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "Razmnoži ime" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "Lastnosti" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "Objava storitve na lokalnem omrežju" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "Pyro izjema: %s\n" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "Pyro objekten uri :" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "Pyro številka vrat :" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Python programska koda" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Python datoteka" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "Kvalifikator" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "Izhod" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "Obseg:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "IEC programska koda" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "Ali želiš izbrisati element '%s'?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "Ponovi" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "Reference" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "Osveži" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Regularni izraz" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "Regularni izrazi" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "Prenehaj vsiljevati vrednost" @@ -2791,56 +2802,56 @@ msgid "Remainder (modulo)" msgstr "Ostanek (modulo)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "Odstrani element %s" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "Odstrani Podatkovni tip" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "Odstrani POU" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "Odstrani Akcijo" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "Odstrani element" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "Odstrani datoteko iz leve mape" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "Odstrani Primerek" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Odstrani podrejeno napravo" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "Odstrani Opravilo" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "Odstrani spremenljivko" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "Preimenuj" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "Zamenjaj datoteko" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "Zamenjaj žico z Konektorjema." @@ -2848,43 +2859,43 @@ msgid "Replacement (within)" msgstr "Zamenjaj (znotraj)" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "Nastavi na 0" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "Ponastavi vrstni red izvajanja" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "Ponastavi pogled" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "Počisti rezultate iskanja" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Viri" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "Obdrži v spominu" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "Tip rezultata:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "Desno" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "Desni napajalni vodnik" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "Pozitivna fronta" @@ -2900,114 +2911,114 @@ msgid "Rounding up/down" msgstr "Zaokroževanje navzgor/navzdol" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "Delovanje" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "Neuspešno generiranje C programske kode za I/O knjižnice!\n" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "Neuspešno generiranje C programske kode za izvajalne knjižnice!\n" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "SDO Odjemalec" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "SDO Strežnik" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "SFC skok v POU \"{a1}\" se sklicuje na neobstoječi SFC skok \"{a2}\"" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "SFC prehod v POU \"%s\" mora biti povezan." -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "ST" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST datoteke (*.st)|*.st|Vse datoteke|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG datoteke (*.svg)|*.svg|Vse datoteke|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "Shrani" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "Shrani kot..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "Shrani kot" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "Pot za shranjevanje je enaka kot pot za shranjevanje projekta!! \n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Obseg iskanja" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "Išči" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "Išči v projektu" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "Sekunde:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "Izberi vse" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "Izberi Razred spremenljivke" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "Izberi urejevalnik:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "Izberi Primerek" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "Izberi Objekt" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "Izbrana mapa že vsebuje drugi Projekt. Prepišem? \n" @@ -3015,23 +3026,23 @@ msgid "Selection" msgstr "Izbira" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "Izbira Stekališče" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "Izbira Razhajališče" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Pregled storitev na voljo:" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "Storitve na voljo:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "Nastavi na 1" @@ -3043,27 +3054,27 @@ msgid "Shift right" msgstr "Pomakni v desno" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "Prikaži IEC kodo, ki jo je ustvaril PLCGenerator" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "Prikaži nadrejeno napravo" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "Prikaži nadrejeno napravo, izdelano z config_utils" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "Prikaži programsko kodo" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "Simultano Steklališče" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "Simultano Razhajališče" @@ -3071,15 +3082,15 @@ msgid "Sine" msgstr "Sinus" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "Posamičen" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "Izvorna koda se ni spremenila, ne bo nove gradnje projekta.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3092,60 +3103,56 @@ msgid "Square root (base 2)" msgstr "Kvadratni koren (base 2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "Standardni funkcijski bloki" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "Zaženi krmilnik" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "Začni izvajati gradnjo projekta v %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "Zagnan" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "Krmilnik se zaganja\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "Statusna vrstica" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "Korak" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "Ustavi" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "Ustavi krmilnik" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "Ustavi delujoč krmilnik" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "Ustavljen" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "Ustavljam razhroščevalnik...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "Struktura" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Intervalni" @@ -3153,19 +3160,19 @@ msgid "Subtraction" msgstr "Odštevanje" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "Uspešno izgrajeno.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "Zamenjaj pogled" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "Sintaktična napaka v izrazu vzorca za iskanje!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "TYPE" @@ -3173,19 +3180,19 @@ msgid "Tangent" msgstr "Tangens" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "Opravilo" -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "Opravila:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "Začasno" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3205,7 +3212,7 @@ "Naročilo na poštni seznam skleneš na naslovu:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3214,15 +3221,15 @@ "Datoteka '%s' že obstaja.\n" "Ali jo želiš zamenjati?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "Skupina blokov mora biti skladna!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "Narejene so bile spremembe, želiš shraniti?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " @@ -3231,17 +3238,17 @@ "POU z imenom \"%s\" že obstaja. To lahko povzroči težave. Ali želiš " "nadaljevati?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" msgstr "Težava z tiskanjem. Mogoče vaš tiskalnik ni nastavljen pravilno?" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "Ta opcija še ni na voljo!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "Tik-tak: %d" @@ -3279,36 +3286,36 @@ msgid "Time-of-day subtraction" msgstr "Odštevanje dejanskega časa" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "Spremeni vrednost" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "Zgoraj" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "Prenesi" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "Prenesi na krmilnik" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "Uspešno zaključen prenos.\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "Prenos ni uspešen\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "Prehod" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " @@ -3317,58 +3324,58 @@ "Telo Prehoda \"%s\" mora vsebovati izhodno spremenljivko ali Tuljavo, " "referencirano po njenem imenu" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "Ime prehoda" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "Ime prehoda:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "Prehod z vsebino \"{a1}\" ni povezan z naslednjim Korakom v POU \"{a2}\"" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "Prehod z vsebino \"{a1}\" ni povezan z prejšnjim Korakom v POU \"{a2}\"" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "Prehod z imenom %s ne obstaja!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "Prehodi" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "Prevedel" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "Proženje" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "Twisted programski paket ni na voljo." -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "Tip" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "Enak tip in izpeljanke" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "Neustrezen Tip za lokacijo \"%s\"" @@ -3377,179 +3384,233 @@ msgid "Type conversion" msgstr "Sprememba podatkovnega tipa" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "Detajlne informacije o podatkovnem tipu:" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "Enak Tip" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Tip:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "Nisem uspel ustvariti PDO preslikave za elemnent %02x" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "Nisem uspel dobiti Xenomai's %s \n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "Nedefiniran tip bloka \"{a1}\" v POU \"{a2}\"" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "Nedefiniran tip POU \"%s\"" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "Razveljavi" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "Neznano" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Neznana spremenljivka \"%s\" za ta POU!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "Neimenovan" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "Neimenovan%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Nerazpoznavna velikost podatkovnega tipa \"%s\"" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "Uporabniški Podatkovni tipi" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "Uporabniški podatkovni tip" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "Uporabniški POU-ji" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "Vrednost" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "Vrednosti:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "Spremenljivka" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "Spusti spremenljivko" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "Lastnosti spremenljivke" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "Spremenljivka Razreda" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "Spremenljivka ne pripadata temu POU!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Spremenljivka:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "Spremenljivke" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "Vertikalno:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "WAMP podrejena naprava - napaka v zagonu. " -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "WAMP povezuje na URL : %s\n" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "WAMP potekel čas za vzpostavitev" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "WAMP povezava na '%s' ni bila uspešna.\n" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "WAMP uvoz - napaka :" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Opozorila" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Opozorila v ST/IL/SFC ustvarjalniku programske kode :\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "Celoten projekt" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "Širina:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "Iskanje po celotnem dokumentu" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Napisal" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3557,7 +3618,7 @@ "Nimaš dovoljenja za pisanje.\n" "Vseeno odprem Inkscape ?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3565,7 +3626,7 @@ "Nimaš dovoljenja za pisanje.\n" "Vseeno odprem wxGlade ?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3573,79 +3634,71 @@ "Potrebuješ pravice dostopa za delo na Projektu\n" "Nadaljuj delo na kopiji Projekta ?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "Moraš izbrati blok ali skupino blokov, kjer želiš dodati Skok!" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "Moraš izbrati Žico, na katero želiš dodati Kontakt!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "Prosim vnesi ime!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "Prosim vnesi vrednost!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "Povečaj" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "dnevi" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "napaka: %s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "končal z statusom {a1} (pid {a2})\n" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "datoteka : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "funkcija" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "funkcija : " - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "Funkcijski blok" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "ure" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "vrstica :" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "Inštalacija matiec ni najdena\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "milisekunde" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "minute" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "program" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "sekunde" @@ -3661,27 +3714,27 @@ msgid "string right of" msgstr "Desna stran niza od" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "ni posodobljenih informacij." -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "opozorilo: %s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "{a1} \"{a2}\" ne more biti prilepljeno kot {a3}." -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" -"{a1} XML datoteka ni zgrajena po XSD shemi v vrstici %{a2}:\n" +"{a1} XML datoteka ni zgrajena po XSD shemi v vrstici {a2}:\n" "{a3}" #: Extra XSD strings @@ -3745,6 +3798,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + msgid "BaseParams" msgstr "BaseParams" @@ -3931,7 +4050,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "" "Funkcijski blok Semafor omogoča izvedbo mehanizma, kjer je dovoljen dostop " "do posameznega vira samo enemu programskemu elementu naenkrat." diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_tr_TR.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/Beremiz_tr_TR.po Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,4027 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Beremiz package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Beremiz\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Ibrahim KILICARSLAN , 2018\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/beremiz/teams/75746/tr_TR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr_TR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: ../util/ExceptionHandler.py:58 +#, python-format +msgid "" +"\n" +"An unhandled exception (bug) occured. Bug report saved at :\n" +"(%s)\n" +"\n" +"Please be kind enough to send this file to:\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"You should now restart program.\n" +"\n" +"Traceback:\n" +msgstr "" +"\n" +"Beklenmeyen özel bir durum(hata) oluştu. Hata raporu kaydedildi:\n" +"(%s)\n" +"Bu raporu bize göndererek düzeltmemize yardımcı olun.\n" +"beremiz-devel@lists.sourceforge.net\n" +"\n" +"Çalışmaya devam etmek için programı yeniden başlatmanız gerekmektedir.\n" +"\n" +"Döndürülen hata:\n" + +#: ../controls/VariablePanel.py:90 +msgid " External" +msgstr "Harici" + +#: ../controls/VariablePanel.py:89 +msgid " InOut" +msgstr "Giriş-Çıkış" + +#: ../controls/VariablePanel.py:89 +msgid " Input" +msgstr "Giriş" + +#: ../controls/VariablePanel.py:90 +msgid " Local" +msgstr "Yerel" + +#: ../controls/VariablePanel.py:89 +msgid " Output" +msgstr "Çıkış" + +#: ../controls/VariablePanel.py:91 +msgid " Temp" +msgstr "Geçici" + +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#, python-format +msgid " and %s" +msgstr "ve %s" + +#: ../ProjectController.py:1182 +msgid " generation failed !\n" +msgstr "Derleme başarısız oldu !\n" + +#: ../plcopen/plcopen.py:1029 +#, python-format +msgid "\"%s\" Data Type doesn't exist !!!" +msgstr "\"%s\" Veri türü mevcut değil !!!" + +#: ../plcopen/plcopen.py:1047 +#, python-format +msgid "\"%s\" POU already exists !!!" +msgstr "\"%s\" isminde bir program zaten var !!!" + +#: ../plcopen/plcopen.py:1068 +#, python-format +msgid "\"%s\" POU doesn't exist !!!" +msgstr "\"%s\" isminde bir program bulunamadı !!!" + +#: ../editors/Viewer.py:288 +#, python-format +msgid "\"%s\" can't use itself!" +msgstr "\"%s\" kullanamazsın!" + +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#, python-format +msgid "\"%s\" config already exists!" +msgstr "\"%s\" adında bir konfigürasyon zaten mevcut!" + +#: ../plcopen/plcopen.py:531 +#, python-format +msgid "\"%s\" configuration already exists !!!" +msgstr "\"%s\" adında bir konfigürasyon zaten mevcut !!!" + +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "\"%s\" adında bir konfigürasyon bulunamadı !!!" + +#: ../IDEFrame.py:1638 +#, python-format +msgid "\"%s\" data type already exists!" +msgstr "\"%s\" adında veri türü zaten mevcut!" + +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 +#, python-format +msgid "\"%s\" element for this pou already exists!" +msgstr "\"%s\" öğe bu program için zaten kullanılmış!" + +#: ../BeremizIDE.py:928 +#, python-format +msgid "\"%s\" folder is not a valid Beremiz project\n" +msgstr "\"%s\" bu klasör geçerli bir Beremiz projesi değil\n" + +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 +#, python-format +msgid "\"%s\" is a keyword. It can't be used!" +msgstr "\"%s\" bu bir anahtar kelimedir. Kullanamazsınız!" + +#: ../plcopen/plcopen.py:2836 +#, python-format +msgid "\"%s\" is an invalid value!" +msgstr "" + +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 +#, python-format +msgid "\"%s\" is not a valid folder!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#, python-format +msgid "\"%s\" is not a valid identifier!" +msgstr "" + +#: ../IDEFrame.py:2436 +#, python-format +msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 +#, python-format +msgid "\"%s\" pou already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:62 +#, python-format +msgid "\"%s\" step already exists!" +msgstr "" + +#: ../editors/DataTypeEditor.py:566 +#, python-format +msgid "\"%s\" value already defined!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 +#, python-format +msgid "\"%s\" value isn't a valid array dimension!" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 +#, python-format +msgid "" +"\"%s\" value isn't a valid array dimension!\n" +"Right value must be greater than left value." +msgstr "" + +#: ../PLCGenerator.py:1133 +#, python-brace-format +msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" +msgstr "" + +#: ../editors/Viewer.py:292 +#, python-brace-format +msgid "\"{a1}\" is already used by \"{a2}\"!" +msgstr "" + +#: ../plcopen/plcopen.py:557 +#, python-brace-format +msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" +msgstr "" + +#: ../plcopen/plcopen.py:577 +#, python-brace-format +msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#, python-format +msgid "%03gms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#, python-format +msgid "%dd" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#, python-format +msgid "%dh" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#, python-format +msgid "%dm" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#, python-format +msgid "%dms" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#, python-format +msgid "%ds" +msgstr "" + +#: ../PLCControler.py:1114 +#, python-format +msgid "%s Data Types" +msgstr "" + +#: ../PLCControler.py:1097 +#, python-format +msgid "%s POUs" +msgstr "" + +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 +#, python-format +msgid "%s Profile" +msgstr "" + +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 +#, python-format +msgid "%s body don't have instances!" +msgstr "" + +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 +#, python-format +msgid "%s body don't have text!" +msgstr "" + +#: ../IDEFrame.py:388 +msgid "&Add Element" +msgstr "" + +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 +msgid "&Close" +msgstr "" + +#: ../IDEFrame.py:361 +msgid "&Configuration" +msgstr "" + +#: ../IDEFrame.py:350 +msgid "&Data Type" +msgstr "" + +#: ../IDEFrame.py:392 +msgid "&Delete" +msgstr "" + +#: ../IDEFrame.py:342 +msgid "&Display" +msgstr "" + +#: ../IDEFrame.py:341 +msgid "&Edit" +msgstr "" + +#: ../IDEFrame.py:340 +msgid "&File" +msgstr "" + +#: ../IDEFrame.py:352 +msgid "&Function" +msgstr "" + +#: ../IDEFrame.py:343 +msgid "&Help" +msgstr "" + +#: ../dialogs/AboutDialog.py:70 +msgid "&License" +msgstr "" + +#: ../IDEFrame.py:356 +msgid "&Program" +msgstr "" + +#: ../PLCOpenEditor.py:98 +msgid "&Properties" +msgstr "" + +#: ../BeremizIDE.py:244 +msgid "&Recent Projects" +msgstr "" + +#: ../IDEFrame.py:358 +msgid "&Resource" +msgstr "" + +#: ../controls/SearchResultPanel.py:247 +#, python-brace-format +msgid "'{a1}' - {a2} match in project" +msgstr "" + +#: ../controls/SearchResultPanel.py:249 +#, python-brace-format +msgid "'{a1}' - {a2} matches in project" +msgstr "" + +#: ../connectors/PYRO/__init__.py:98 +#, python-brace-format +msgid "'{a1}' is located at {a2}\n" +msgstr "" + +#: ../controls/SearchResultPanel.py:298 +#, python-format +msgid "(%d matches)" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 +#, python-format +msgid ", %s" +msgstr "" + +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "" + +#: ../controls/LogViewer.py:287 +msgid "1d" +msgstr "" + +#: ../controls/LogViewer.py:288 +msgid "1h" +msgstr "" + +#: ../controls/LogViewer.py:289 +msgid "1m" +msgstr "" + +#: ../controls/LogViewer.py:290 +msgid "1s" +msgstr "" + +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 +#, python-format +msgid "" +"A POU has an element named \"%s\". This could cause a conflict. Do you wish " +"to continue?" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#, python-format +msgid "A POU named \"%s\" already exists!" +msgstr "" + +#: ../ConfigTreeNode.py:424 +#, python-brace-format +msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:229 +msgid "A location must be selected!" +msgstr "" + +#: ../editors/ResourceEditor.py:485 +msgid "A task with the same name already exists!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#, python-format +msgid "A variable with \"%s\" as name already exists in this pou!" +msgstr "" + +#: ../editors/CodeFileEditor.py:778 +#, python-format +msgid "A variable with \"%s\" as name already exists!" +msgstr "" + +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 +msgid "About" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Absolute number" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 +msgid "Action" +msgstr "" + +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +msgid "Action Block" +msgstr "" + +#: ../dialogs/PouActionDialog.py:89 +msgid "Action Name" +msgstr "" + +#: ../dialogs/PouActionDialog.py:56 +msgid "Action Name:" +msgstr "" + +#: ../plcopen/plcopen.py:1567 +#, python-format +msgid "Action with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Actions" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:139 +msgid "Actions:" +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Active" +msgstr "" + +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +msgid "Add" +msgstr "" + +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +msgid "Add Action" +msgstr "" + +#: ../features.py:33 +msgid "Add C code accessing located variables synchronously" +msgstr "" + +#: ../IDEFrame.py:1907 +msgid "Add Configuration" +msgstr "" + +#: ../IDEFrame.py:1887 +msgid "Add DataType" +msgstr "" + +#: ../editors/Viewer.py:609 +msgid "Add Divergence Branch" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:121 +msgid "Add IP" +msgstr "" + +#: ../IDEFrame.py:1895 +msgid "Add POU" +msgstr "" + +#: ../features.py:34 +msgid "Add Python code executed asynchronously" +msgstr "" + +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +msgid "Add Resource" +msgstr "" + +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +msgid "Add Transition" +msgstr "" + +#: ../editors/Viewer.py:596 +msgid "Add Wire Segment" +msgstr "" + +#: ../editors/SFCViewer.py:447 +msgid "Add a new initial step" +msgstr "" + +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +msgid "Add a new jump" +msgstr "" + +#: ../editors/SFCViewer.py:469 +msgid "Add a new step" +msgstr "" + +#: ../features.py:35 +msgid "Add a simple WxGlade based GUI." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:143 +msgid "Add action" +msgstr "" + +#: ../editors/DataTypeEditor.py:364 +msgid "Add element" +msgstr "" + +#: ../editors/ResourceEditor.py:283 +msgid "Add instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:110 +msgid "Add slave" +msgstr "" + +#: ../editors/ResourceEditor.py:252 +msgid "Add task" +msgstr "" + +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +msgid "Add variable" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Addition" +msgstr "" + +#: ../plcopen/definitions.py:51 +msgid "Additional function blocks" +msgstr "" + +#: ../editors/Viewer.py:669 +msgid "Adjust Block Size" +msgstr "" + +#: ../editors/Viewer.py:1720 +msgid "Alignment" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 +msgid "All" +msgstr "" + +#: ../editors/FileManagementPanel.py:37 +msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" +msgstr "" + +#: ../ProjectController.py:1670 +msgid "Already connected. Please disconnect\n" +msgstr "" + +#: ../editors/DataTypeEditor.py:607 +#, python-format +msgid "An element named \"%s\" already exists in this structure!" +msgstr "" + +#: ../editors/ResourceEditor.py:520 +msgid "An instance with the same name already exists!" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:103 +msgid "Apply name modification to all continuations with the same name" +msgstr "" + +#: ../plcopen/iec_std.csv:31 +msgid "Arc cosine" +msgstr "" + +#: ../plcopen/iec_std.csv:30 +msgid "Arc sine" +msgstr "" + +#: ../plcopen/iec_std.csv:32 +msgid "Arc tangent" +msgstr "" + +#: ../plcopen/iec_std.csv:33 +msgid "Arithmetic" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 +msgid "Array" +msgstr "" + +#: ../plcopen/iec_std.csv:39 +msgid "Assignment" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:226 +msgid "At least a variable or an expression must be selected!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:111 +msgid "Author" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:108 +msgid "Author Name (optional):" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:80 +msgid "Backward" +msgstr "" + +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 +#, python-format +msgid "Bad location size : %s" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 +msgid "Base Type:" +msgstr "" + +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +msgid "Base Types" +msgstr "" + +#: ../BeremizIDE.py:483 +msgid "Beremiz" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Binary selection (1 of 2)" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Bit-shift" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise" +msgstr "" + +#: ../plcopen/iec_std.csv:66 +msgid "Bitwise AND" +msgstr "" + +#: ../plcopen/iec_std.csv:67 +msgid "Bitwise OR" +msgstr "" + +#: ../plcopen/iec_std.csv:68 +msgid "Bitwise XOR" +msgstr "" + +#: ../plcopen/iec_std.csv:69 +msgid "Bitwise inverting" +msgstr "" + +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +msgid "Block" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:63 +msgid "Block Properties" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Block name" +msgstr "" + +#: ../editors/Viewer.py:586 +msgid "Bottom" +msgstr "" + +#: ../ProjectController.py:1400 +msgid "Broken" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:40 +#, python-format +msgid "Browse %s values library" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:72 +msgid "Browse Locations" +msgstr "" + +#: ../ProjectController.py:1815 +msgid "Build" +msgstr "" + +#: ../ProjectController.py:1335 +msgid "Build directory already clean\n" +msgstr "" + +#: ../ProjectController.py:1816 +msgid "Build project into build folder" +msgstr "" + +#: ../ProjectController.py:1108 +msgid "C Build crashed !\n" +msgstr "" + +#: ../ProjectController.py:1105 +msgid "C Build failed.\n" +msgstr "" + +#: ../c_ext/CFileEditor.py:66 +msgid "C code" +msgstr "" + +#: ../ProjectController.py:1186 +msgid "C code generated successfully.\n" +msgstr "" + +#: ../targets/toolchain_makefile.py:126 +msgid "C compilation failed.\n" +msgstr "" + +#: ../targets/toolchain_gcc.py:199 +#, python-format +msgid "C compilation of %s failed.\n" +msgstr "" + +#: ../features.py:33 +msgid "C extension" +msgstr "" + +#: ../dialogs/AboutDialog.py:69 +msgid "C&redits" +msgstr "" + +#: ../canfestival/NetworkEditor.py:58 +msgid "CANOpen network" +msgstr "" + +#: ../canfestival/SlaveEditor.py:48 +msgid "CANOpen slave" +msgstr "" + +#: ../features.py:31 +msgid "CANopen support" +msgstr "" + +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 +msgid "Can only generate execution order on FBD networks!" +msgstr "" + +#: ../controls/VariablePanel.py:291 +msgid "Can only give a location to local or global variables" +msgstr "" + +#: ../PLCOpenEditor.py:318 +#, python-format +msgid "Can't generate program to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:289 +msgid "Can't give a location to a function block instance" +msgstr "" + +#: ../PLCOpenEditor.py:363 +#, python-format +msgid "Can't save project to file %s!" +msgstr "" + +#: ../controls/VariablePanel.py:339 +msgid "Can't set an initial value to a function block instance" +msgstr "" + +#: ../ConfigTreeNode.py:532 +#, python-brace-format +msgid "Cannot create child {a1} of type {a2} " +msgstr "" + +#: ../ConfigTreeNode.py:454 +#, python-format +msgid "Cannot find lower free IEC channel than %d\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:139 +msgid "Cannot get PLC status - connection failed.\n" +msgstr "" + +#: ../ProjectController.py:967 +msgid "Cannot open/parse VARIABLES.csv!\n" +msgstr "" + +#: ../canfestival/config_utils.py:400 +#, python-brace-format +msgid "" +"Cannot set bit offset for non bool '{a1}' variable " +"(ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 +msgid "Case sensitive" +msgstr "" + +#: ../editors/Viewer.py:581 +msgid "Center" +msgstr "" + +#: ../Beremiz_service.py:276 +msgid "Change IP of interface to bind" +msgstr "" + +#: ../Beremiz_service.py:275 +msgid "Change Name" +msgstr "" + +#: ../IDEFrame.py:1977 +msgid "Change POU Type To" +msgstr "" + +#: ../Beremiz_service.py:277 +msgid "Change Port Number" +msgstr "" + +#: ../Beremiz_service.py:278 +msgid "Change working directory" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Character string" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "Choose a SVG file" +msgstr "" + +#: ../ProjectController.py:561 +msgid "Choose a directory to save project" +msgstr "" + +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +msgid "Choose a file" +msgstr "" + +#: ../BeremizIDE.py:900 +msgid "Choose a project" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:43 +#, python-format +msgid "Choose a value for %s:" +msgstr "" + +#: ../Beremiz_service.py:333 +msgid "Choose a working directory " +msgstr "" + +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "" + +#: ../ProjectController.py:468 +msgid "Chosen folder doesn't contain a program. It's not a valid project!" +msgstr "" + +#: ../ProjectController.py:435 +msgid "Chosen folder isn't empty. You can't use it for a new project!" +msgstr "" + +#: ../controls/VariablePanel.py:60 +msgid "Class" +msgstr "" + +#: ../controls/VariablePanel.py:472 +msgid "Class Filter:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:74 +msgid "Class:" +msgstr "" + +#: ../ProjectController.py:1821 +msgid "Clean" +msgstr "" + +#: ../controls/LogViewer.py:327 +msgid "Clean log messages" +msgstr "" + +#: ../ProjectController.py:1822 +msgid "Clean project build folder" +msgstr "" + +#: ../ProjectController.py:1332 +msgid "Cleaning the build directory\n" +msgstr "" + +#: ../IDEFrame.py:437 +msgid "Clear Errors" +msgstr "" + +#: ../editors/Viewer.py:680 +msgid "Clear Execution Order" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +msgid "Close" +msgstr "" + +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +msgid "Close Application" +msgstr "" + +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 +msgid "Close Project" +msgstr "" + +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 +msgid "Close Tab" +msgstr "" + +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +msgid "Coil" +msgstr "" + +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +msgid "Comment" +msgstr "" + +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 +msgid "Community support" +msgstr "" + +#: ../dialogs/ProjectDialog.py:65 +msgid "Company Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:106 +msgid "Company Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:107 +msgid "Company URL (optional):" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Comparison" +msgstr "" + +#: ../ProjectController.py:756 +msgid "Compiling IEC Program into C code...\n" +msgstr "" + +#: ../plcopen/iec_std.csv:85 +msgid "Concatenation" +msgstr "" + +#: ../editors/ConfTreeNodeEditor.py:241 +msgid "Config" +msgstr "" + +#: ../editors/ProjectNodeEditor.py:39 +msgid "Config variables" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:43 +msgid "Configuration" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Configurations" +msgstr "" + +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +msgid "Confirm or change variable name" +msgstr "" + +#: ../ProjectController.py:1842 +msgid "Connect" +msgstr "" + +#: ../ProjectController.py:1843 +msgid "Connect to the target PLC" +msgstr "" + +#: ../ProjectController.py:1391 +#, python-format +msgid "Connected to URI: %s" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 +msgid "Connection" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:55 +msgid "Connection Properties" +msgstr "" + +#: ../ProjectController.py:1691 +msgid "Connection canceled!\n" +msgstr "" + +#: ../ProjectController.py:1714 +#, python-format +msgid "Connection failed to %s!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +msgid "Connection lost!\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:110 +#, python-format +msgid "Connection to '%s' failed.\n" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +msgid "Connector" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:68 +msgid "Connectors:" +msgstr "" + +#: ../BeremizIDE.py:378 +msgid "Console" +msgstr "" + +#: ../controls/VariablePanel.py:75 +msgid "Constant" +msgstr "" + +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +msgid "Contact" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:217 +msgid "Content Description (optional):" +msgstr "" + +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +msgid "Continuation" +msgstr "" + +#: ../plcopen/iec_std.csv:18 +msgid "Conversion from BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:19 +msgid "Conversion to BCD" +msgstr "" + +#: ../plcopen/iec_std.csv:21 +msgid "Conversion to date" +msgstr "" + +#: ../plcopen/iec_std.csv:20 +msgid "Conversion to time-of-day" +msgstr "" + +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 +msgid "Copy" +msgstr "" + +#: ../IDEFrame.py:1964 +msgid "Copy POU" +msgstr "" + +#: ../editors/FileManagementPanel.py:68 +msgid "Copy file from left folder to right" +msgstr "" + +#: ../editors/FileManagementPanel.py:67 +msgid "Copy file from right folder to left" +msgstr "" + +#: ../plcopen/iec_std.csv:28 +msgid "Cosine" +msgstr "" + +#: ../ConfigTreeNode.py:660 +#, python-brace-format +msgid "" +"Could not add child \"{a1}\", type {a2} :\n" +"{a3}\n" +msgstr "" + +#: ../py_ext/PythonFileCTNMixin.py:81 +#, python-format +msgid "Couldn't import old %s file." +msgstr "" + +#: ../ConfigTreeNode.py:630 +#, python-brace-format +msgid "" +"Couldn't load confnode base parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 +#, python-brace-format +msgid "" +"Couldn't load confnode parameters {a1} :\n" +" {a2}" +msgstr "" + +#: ../PLCControler.py:552 +msgid "Couldn't paste non-POU object." +msgstr "" + +#: ../ProjectController.py:1636 +msgid "Couldn't start PLC !\n" +msgstr "" + +#: ../ProjectController.py:1644 +msgid "Couldn't stop PLC !\n" +msgstr "" + +#: ../svgui/svgui.py:57 +msgid "Create HMI" +msgstr "" + +#: ../dialogs/PouDialog.py:54 +msgid "Create a new POU" +msgstr "" + +#: ../dialogs/PouActionDialog.py:45 +msgid "Create a new action" +msgstr "" + +#: ../IDEFrame.py:166 +msgid "Create a new action block" +msgstr "" + +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +msgid "Create a new block" +msgstr "" + +#: ../IDEFrame.py:139 +msgid "Create a new branch" +msgstr "" + +#: ../IDEFrame.py:133 +msgid "Create a new coil" +msgstr "" + +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +msgid "Create a new comment" +msgstr "" + +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +msgid "Create a new connection" +msgstr "" + +#: ../IDEFrame.py:136 ../IDEFrame.py:187 +msgid "Create a new contact" +msgstr "" + +#: ../IDEFrame.py:169 +msgid "Create a new divergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:54 +msgid "Create a new divergence or convergence" +msgstr "" + +#: ../IDEFrame.py:157 +msgid "Create a new initial step" +msgstr "" + +#: ../IDEFrame.py:172 +msgid "Create a new jump" +msgstr "" + +#: ../IDEFrame.py:127 ../IDEFrame.py:184 +msgid "Create a new power rail" +msgstr "" + +#: ../IDEFrame.py:130 +msgid "Create a new rung" +msgstr "" + +#: ../IDEFrame.py:160 +msgid "Create a new step" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +msgid "Create a new transition" +msgstr "" + +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +msgid "Create a new variable" +msgstr "" + +#: ../dialogs/AboutDialog.py:109 +msgid "Credits" +msgstr "" + +#: ../Beremiz_service.py:424 +msgid "Current working directory :" +msgstr "" + +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +msgid "Cut" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Cyclic" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44 +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50 +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54 +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58 +#: ../plcopen/iec_std.csv:60 +msgid "DEPRECATED" +msgstr "" + +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 +msgid "DS-301 Profile" +msgstr "" + +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 +msgid "DS-302 Profile" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:39 +msgid "Data Type" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Data Types" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Data type conversion" +msgstr "" + +#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45 +msgid "Date addition" +msgstr "" + +#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57 +#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59 +msgid "Date and time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51 +msgid "Date subtraction" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:46 +msgid "Days:" +msgstr "" + +#: ../ProjectController.py:1729 +msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:144 +msgid "Debug instance" +msgstr "" + +#: ../editors/Viewer.py:490 +#, python-format +msgid "Debug: %s" +msgstr "" + +#: ../ProjectController.py:1471 +#, python-format +msgid "Debug: Unknown variable '%s'\n" +msgstr "" + +#: ../ProjectController.py:1469 +#, python-format +msgid "Debug: Unsupported type to debug '%s'\n" +msgstr "" + +#: ../IDEFrame.py:660 +msgid "Debugger" +msgstr "" + +#: ../ProjectController.py:1726 +msgid "Debugger ready\n" +msgstr "" + +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +msgid "Delete" +msgstr "" + +#: ../editors/Viewer.py:610 +msgid "Delete Divergence Branch" +msgstr "" + +#: ../editors/FileManagementPanel.py:157 +msgid "Delete File" +msgstr "" + +#: ../editors/Viewer.py:597 +msgid "Delete Wire Segment" +msgstr "" + +#: ../controls/CustomEditableListBox.py:44 +msgid "Delete item" +msgstr "" + +#: ../plcopen/iec_std.csv:88 +msgid "Deletion (within)" +msgstr "" + +#: ../editors/DataTypeEditor.py:161 +msgid "Derivation Type:" +msgstr "" + +#: ../editors/CodeFileEditor.py:735 +msgid "Description" +msgstr "" + +#: ../controls/VariablePanel.py:463 +msgid "Description:" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 +msgid "Dimensions:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:69 +msgid "Direction" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:102 +msgid "Direction:" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Directly" +msgstr "" + +#: ../ProjectController.py:1855 +msgid "Disconnect" +msgstr "" + +#: ../ProjectController.py:1856 +msgid "Disconnect from PLC" +msgstr "" + +#: ../ProjectController.py:1401 +msgid "Disconnected" +msgstr "" + +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +msgid "Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:36 +msgid "Division" +msgstr "" + +#: ../editors/FileManagementPanel.py:156 +#, python-format +msgid "Do you really want to delete the file '%s'?" +msgstr "" + +#: ../controls/VariablePanel.py:65 +msgid "Documentation" +msgstr "" + +#: ../PLCOpenEditor.py:312 +msgid "Done" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Duration" +msgstr "" + +#: ../canfestival/canfestival.py:174 +msgid "EDS files (*.eds)|*.eds|All files|*.*" +msgstr "" + +#: ../editors/Viewer.py:668 +msgid "Edit Block" +msgstr "" + +#: ../dialogs/LDElementDialog.py:58 +msgid "Edit Coil Values" +msgstr "" + +#: ../dialogs/LDElementDialog.py:56 +msgid "Edit Contact Values" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 +msgid "Edit Duration" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:53 +msgid "Edit Step" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:45 +msgid "Edit a WxWidgets GUI with WXGlade" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:127 +msgid "Edit action block properties" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:47 +msgid "Edit array type properties" +msgstr "" + +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +msgid "Edit comment" +msgstr "" + +#: ../editors/FileManagementPanel.py:69 +msgid "Edit file" +msgstr "" + +#: ../controls/CustomEditableListBox.py:42 +msgid "Edit item" +msgstr "" + +#: ../editors/Viewer.py:3059 +msgid "Edit jump target" +msgstr "" + +#: ../ProjectController.py:1873 +msgid "Edit raw IEC code added to code generated by PLCGenerator" +msgstr "" + +#: ../editors/SFCViewer.py:815 +msgid "Edit step name" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:53 +msgid "Edit transition" +msgstr "" + +#: ../IDEFrame.py:632 +msgid "Editor ToolBar" +msgstr "" + +#: ../ProjectController.py:1294 +msgid "Editor selection" +msgstr "" + +#: ../editors/DataTypeEditor.py:360 +msgid "Elements :" +msgstr "" + +#: ../ProjectController.py:1399 +msgid "Empty" +msgstr "" + +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "" + +#: ../Beremiz_service.py:341 +msgid "Enter a name " +msgstr "" + +#: ../Beremiz_service.py:326 +msgid "Enter a port number " +msgstr "" + +#: ../Beremiz_service.py:317 +msgid "Enter the IP of the interface to bind" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Enumerated" +msgstr "" + +#: ../plcopen/iec_std.csv:77 +msgid "Equal to" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +msgid "Error" +msgstr "" + +#: ../ProjectController.py:811 +msgid "" +"Error : At least one configuration and one resource must be declared in PLC " +"!\n" +msgstr "" + +#: ../ProjectController.py:803 +#, python-format +msgid "Error : IEC to C compiler returned %d\n" +msgstr "" + +#: ../ProjectController.py:731 +#, python-format +msgid "" +"Error in ST/IL/SFC code generator :\n" +"%s\n" +msgstr "" + +#: ../ConfigTreeNode.py:219 +#, python-format +msgid "Error while saving \"%s\"\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 +msgid "Error: Export slave failed\n" +msgstr "" + +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "" + +#: ../canfestival/canfestival.py:388 +msgid "Error: No Master generated\n" +msgstr "" + +#: ../canfestival/canfestival.py:383 +msgid "Error: No PLC built\n" +msgstr "" + +#: ../ProjectController.py:1708 +#, python-format +msgid "Exception while connecting %s!\n" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:123 +msgid "Execution Control:" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +msgid "Execution Order:" +msgstr "" + +#: ../features.py:36 +msgid "Experimental web based HMI" +msgstr "" + +#: ../plcopen/iec_std.csv:38 +msgid "Exponent" +msgstr "" + +#: ../plcopen/iec_std.csv:26 +msgid "Exponentiation" +msgstr "" + +#: ../canfestival/canfestival.py:186 +msgid "Export CanOpen slave to EDS file" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +msgid "Export graph values to clipboard" +msgstr "" + +#: ../canfestival/canfestival.py:185 +msgid "Export slave" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:94 +msgid "Expression:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "External" +msgstr "" + +#: ../ProjectController.py:826 +msgid "Extracting Located Variables...\n" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "FBD" +msgstr "" + +#: ../ProjectController.py:1773 +msgid "Failed : Must build before transfer.\n" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +msgid "Falling Edge" +msgstr "" + +#: ../ProjectController.py:1098 +msgid "Fatal : cannot get builder.\n" +msgstr "" + +#: ../Beremiz.py:160 +#, python-format +msgid "Fetching %s" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:167 +#, python-format +msgid "Field %s hasn't a valid value!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:169 +#, python-format +msgid "Fields %s haven't a valid value!" +msgstr "" + +#: ../controls/FolderTree.py:221 +#, python-format +msgid "File '%s' already exists!" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +msgid "Find" +msgstr "" + +#: ../IDEFrame.py:379 +msgid "Find Next" +msgstr "" + +#: ../IDEFrame.py:381 +msgid "Find Previous" +msgstr "" + +#: ../plcopen/iec_std.csv:90 +msgid "Find position" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:58 +msgid "Find:" +msgstr "" + +#: ../editors/Viewer.py:1633 +msgid "Force value" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:176 +msgid "Forcing Variable Value" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 +#, python-format +msgid "Form isn't complete. %s must be filled!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 +msgid "Form isn't complete. Name must be filled!" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:235 +msgid "Form isn't complete. Valid block type must be selected!" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:75 +msgid "Forward" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +msgid "Function" +msgstr "" + +#: ../IDEFrame.py:354 +msgid "Function &Block" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 +msgid "Function Block" +msgstr "" + +#: ../controls/VariablePanel.py:868 +msgid "Function Block Types" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Function Blocks" +msgstr "" + +#: ../editors/Viewer.py:290 +msgid "Function Blocks can't be used in Functions!" +msgstr "" + +#: ../PLCControler.py:1907 +#, python-format +msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "Functions" +msgstr "" + +#: ../PLCOpenEditor.py:88 +msgid "Generate Program" +msgstr "" + +#: ../ProjectController.py:722 +msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Global" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +msgid "Go to current value" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:189 +msgid "Graphics" +msgstr "" + +#: ../plcopen/iec_std.csv:75 +msgid "Greater than" +msgstr "" + +#: ../plcopen/iec_std.csv:76 +msgid "Greater than or equal to" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:149 +msgid "Grid Resolution:" +msgstr "" + +#: ../runtime/NevowServer.py:192 +msgid "HTTP interface port :" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:135 +msgid "Height:" +msgstr "" + +#: ../editors/FileManagementPanel.py:89 +msgid "Home Directory:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:165 +msgid "Horizontal:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:47 +msgid "Hours:" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "IL" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:91 +msgid "IP" +msgstr "" + +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +msgid "IP is not valid!" +msgstr "" + +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 +msgid "Import SVG" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 +msgid "InOut" +msgstr "" + +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "" + +#: ../editors/Viewer.py:473 +msgid "Inactive" +msgstr "" + +#: ../controls/VariablePanel.py:300 +#, python-brace-format +msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../controls/VariablePanel.py:306 +#, python-format +msgid "Incompatible size of data between \"%s\" and \"BOOL\"" +msgstr "" + +#: ../controls/VariablePanel.py:310 +#, python-brace-format +msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Indicator" +msgstr "" + +#: ../editors/CodeFileEditor.py:734 +msgid "Initial" +msgstr "" + +#: ../editors/Viewer.py:650 +msgid "Initial Step" +msgstr "" + +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 +msgid "Initial Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 +msgid "Initial Value:" +msgstr "" + +#: ../svgui/svgui.py:56 +msgid "Inkscape" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 +msgid "Inline" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Input" +msgstr "" + +#: ../dialogs/FBDBlockDialog.py:99 +msgid "Inputs:" +msgstr "" + +#: ../plcopen/iec_std.csv:87 +msgid "Insertion (into)" +msgstr "" + +#: ../plcopen/plcopen.py:1948 +#, python-format +msgid "Instance with id %d doesn't exist!" +msgstr "" + +#: ../editors/ResourceEditor.py:279 +msgid "Instances:" +msgstr "" + +#: ../controls/VariablePanel.py:88 +msgid "Interface" +msgstr "" + +#: ../editors/ResourceEditor.py:81 +msgid "Interrupt" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Interval" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" + +#: ../PLCControler.py:1895 +msgid "Invalid plcopen element(s)!!!" +msgstr "" + +#: ../canfestival/config_utils.py:407 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../canfestival/config_utils.py:689 +#, python-brace-format +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 +#, python-format +msgid "Invalid value \"%s\" for debug variable" +msgstr "" + +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#, python-format +msgid "Invalid value \"%s\" for variable grid element" +msgstr "" + +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 +#, python-format +msgid "Invalid value \"%s\" for viewer block" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:211 +#, python-brace-format +msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:124 +msgid "" +"Invalid value!\n" +"You must fill a numeric value." +msgstr "" + +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +msgid "Jump" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "LD" +msgstr "" + +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 +#, python-format +msgid "Ladder element with id %d is on more than one rung." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 +msgid "Language" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:206 +msgid "Language (optional):" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 +msgid "Language:" +msgstr "" + +#: ../ProjectController.py:1779 +msgid "Latest build already matches current target. Transfering anyway...\n" +msgstr "" + +#: ../Beremiz_service.py:281 +msgid "Launch WX GUI inspector" +msgstr "" + +#: ../Beremiz_service.py:280 +msgid "Launch a live Python shell" +msgstr "" + +#: ../editors/Viewer.py:580 +msgid "Left" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:64 +msgid "Left PowerRail" +msgstr "" + +#: ../plcopen/iec_std.csv:81 +msgid "Length of string" +msgstr "" + +#: ../plcopen/iec_std.csv:78 +msgid "Less than" +msgstr "" + +#: ../plcopen/iec_std.csv:79 +msgid "Less than or equal to" +msgstr "" + +#: ../IDEFrame.py:652 +msgid "Library" +msgstr "" + +#: ../dialogs/AboutDialog.py:145 +msgid "License" +msgstr "" + +#: ../plcopen/iec_std.csv:73 +msgid "Limitation" +msgstr "" + +#: ../targets/toolchain_gcc.py:209 +msgid "Linking :\n" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +msgid "Local" +msgstr "" + +#: ../canfestival/canfestival.py:359 +msgid "Local entries" +msgstr "" + +#: ../ProjectController.py:1685 +msgid "Local service discovery failed!\n" +msgstr "" + +#: ../controls/VariablePanel.py:62 +msgid "Location" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:79 +msgid "Locations available:" +msgstr "" + +#: ../plcopen/iec_std.csv:25 +msgid "Logarithm to base 10" +msgstr "" + +#: ../connectors/PYRO/__init__.py:102 +#, python-format +msgid "MDNS resolution failure for '%s'\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 +msgid "Map Variable" +msgstr "" + +#: ../features.py:31 +msgid "Map located variables over CANopen" +msgstr "" + +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "" + +#: ../canfestival/NetworkEditor.py:113 +msgid "Master" +msgstr "" + +#: ../ConfigTreeNode.py:544 +#, python-brace-format +msgid "Max count ({a1}) reached for this confnode of type {a2} " +msgstr "" + +#: ../plcopen/iec_std.csv:71 +msgid "Maximum" +msgstr "" + +#: ../editors/DataTypeEditor.py:246 +msgid "Maximum:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Memory" +msgstr "" + +#: ../IDEFrame.py:617 +msgid "Menu ToolBar" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:51 +msgid "Microseconds:" +msgstr "" + +#: ../editors/Viewer.py:585 +msgid "Middle" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:50 +msgid "Milliseconds:" +msgstr "" + +#: ../plcopen/iec_std.csv:72 +msgid "Minimum" +msgstr "" + +#: ../editors/DataTypeEditor.py:233 +msgid "Minimum:" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:48 +msgid "Minutes:" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:231 +msgid "Miscellaneous" +msgstr "" + +#: ../features.py:32 +msgid "Modbus support" +msgstr "" + +#: ../dialogs/LDElementDialog.py:65 +msgid "Modifier:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#, python-brace-format +msgid "" +"More than one connector found corresponding to \"{a1}\" continuation in " +"\"{a2}\" POU" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:146 +msgid "Move action down" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:145 +msgid "Move action up" +msgstr "" + +#: ../controls/CustomEditableListBox.py:46 +msgid "Move down" +msgstr "" + +#: ../editors/DataTypeEditor.py:367 +msgid "Move element down" +msgstr "" + +#: ../editors/DataTypeEditor.py:366 +msgid "Move element up" +msgstr "" + +#: ../editors/ResourceEditor.py:286 +msgid "Move instance down" +msgstr "" + +#: ../editors/ResourceEditor.py:285 +msgid "Move instance up" +msgstr "" + +#: ../editors/ResourceEditor.py:255 +msgid "Move task down" +msgstr "" + +#: ../editors/ResourceEditor.py:254 +msgid "Move task up" +msgstr "" + +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +msgid "Move the view" +msgstr "" + +#: ../controls/CustomEditableListBox.py:45 +msgid "Move up" +msgstr "" + +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +msgid "Move variable down" +msgstr "" + +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +msgid "Move variable up" +msgstr "" + +#: ../plcopen/iec_std.csv:74 +msgid "Multiplexer (select 1 of N)" +msgstr "" + +#: ../plcopen/iec_std.csv:34 +msgid "Multiplication" +msgstr "" + +#: ../editors/FileManagementPanel.py:87 +msgid "My Computer:" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:89 +msgid "NAME" +msgstr "" + +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 +msgid "Name" +msgstr "" + +#: ../Beremiz_service.py:342 +msgid "Name must not be null!" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 +msgid "Name:" +msgstr "" + +#: ../plcopen/iec_std.csv:24 +msgid "Natural logarithm" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +msgid "Negated" +msgstr "" + +#: ../Beremiz_service.py:610 +msgid "Nevow Web service failed. " +msgstr "" + +#: ../Beremiz_service.py:580 +msgid "Nevow/Athena import failed :" +msgstr "" + +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 +msgid "New" +msgstr "" + +#: ../controls/CustomEditableListBox.py:43 +msgid "New item" +msgstr "" + +#: ../editors/Viewer.py:553 +msgid "No Modifier" +msgstr "" + +#: ../ProjectController.py:1808 +msgid "No PLC to transfer (did build succeed ?)\n" +msgstr "" + +#: ../PLCGenerator.py:1678 +#, python-format +msgid "No body defined in \"%s\" POU" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#, python-brace-format +msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" +msgstr "" + +#: ../PLCOpenEditor.py:331 +msgid "" +"No documentation available.\n" +"Coming soon." +msgstr "" + +#: ../PLCGenerator.py:841 +#, python-format +msgid "No informations found for \"%s\" block" +msgstr "" + +#: ../PLCGenerator.py:1232 +#, python-brace-format +msgid "" +"No output {a1} variable found in block {a2} in POU {a3}. Connection must be " +"broken" +msgstr "" + +#: ../controls/SearchResultPanel.py:175 +msgid "No search results available." +msgstr "" + +#: ../svgui/svgui.py:142 +#, python-format +msgid "No such SVG file: %s\n" +msgstr "" + +#: ../canfestival/config_utils.py:682 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) (variable {a3})" +msgstr "" + +#: ../canfestival/config_utils.py:387 +#, python-brace-format +msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +msgstr "" + +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +msgid "No valid value selected!" +msgstr "" + +#: ../PLCGenerator.py:1676 +#, python-format +msgid "No variable defined in \"%s\" POU" +msgstr "" + +#: ../canfestival/config_utils.py:379 +#, python-brace-format +msgid "Non existing node ID : {a1} (variable {a2})" +msgstr "" + +#: ../controls/VariablePanel.py:79 +msgid "Non-Retain" +msgstr "" + +#: ../dialogs/LDElementDialog.py:78 +msgid "Normal" +msgstr "" + +#: ../canfestival/config_utils.py:426 +#, python-brace-format +msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" +msgstr "" + +#: ../plcopen/iec_std.csv:80 +msgid "Not equal to" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:91 +msgid "Number of sequences:" +msgstr "" + +#: ../plcopen/iec_std.csv:22 +msgid "Numerical" +msgstr "" + +#: ../editors/CodeFileEditor.py:736 +msgid "OnChange" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:88 +msgid "Only Elements" +msgstr "" + +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 +msgid "Open" +msgstr "" + +#: ../svgui/svgui.py:151 +msgid "Open Inkscape" +msgstr "" + +#: ../version.py:86 +msgid "" +"Open Source framework for automation, implemented IEC 61131 IDE with " +"constantly growing set of extensions and flexible PLC runtime." +msgstr "" + +#: ../ProjectController.py:1879 +msgid "Open a file explorer to manage project files" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:161 +msgid "Open wxGlade" +msgstr "" + +#: ../controls/VariablePanel.py:64 +msgid "Option" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +msgid "Options" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:109 +msgid "Organization (optional):" +msgstr "" + +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 +msgid "Other Profile" +msgstr "" + +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +msgid "Output" +msgstr "" + +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 +msgid "PDO Receive" +msgstr "" + +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 +msgid "PDO Transmit" +msgstr "" + +#: ../targets/toolchain_gcc.py:174 +msgid "PLC :\n" +msgstr "" + +#: ../BeremizIDE.py:383 +msgid "PLC Log" +msgstr "" + +#: ../ProjectController.py:1082 +msgid "PLC code generation failed !\n" +msgstr "" + +#: ../Beremiz_service.py:305 +msgid "PLC is empty or already started." +msgstr "" + +#: ../Beremiz_service.py:312 +msgid "PLC is not started." +msgstr "" + +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 +#, python-brace-format +msgid "" +"PLC syntax error at line {a1}:\n" +"{a2}" +msgstr "" + +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 +msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 +msgid "PLCOpenEditor" +msgstr "" + +#: ../PLCOpenEditor.py:339 +msgid "" +"PLCOpenEditor is part of Beremiz project.\n" +"\n" +"Beremiz is an " +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:92 +msgid "PORT" +msgstr "" + +#: ../dialogs/PouDialog.py:109 +msgid "POU Name" +msgstr "" + +#: ../dialogs/PouDialog.py:66 +msgid "POU Name:" +msgstr "" + +#: ../dialogs/PouDialog.py:111 +msgid "POU Type" +msgstr "" + +#: ../dialogs/PouDialog.py:73 +msgid "POU Type:" +msgstr "" + +#: ../connectors/PYRO/__init__.py:52 +#, python-format +msgid "PYRO connecting to URI : %s\n" +msgstr "" + +#: ../connectors/PYRO/__init__.py:68 +#, python-format +msgid "PYRO using certificates in '%s' \n" +msgstr "" + +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 +msgid "Page Setup" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:124 +msgid "Page Size (optional):" +msgstr "" + +#: ../IDEFrame.py:2640 +#, python-format +msgid "Page: %d" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:134 +msgid "Parent instance" +msgstr "" + +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +msgid "Paste" +msgstr "" + +#: ../IDEFrame.py:1899 +msgid "Paste POU" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:60 +msgid "Pattern to search:" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:75 +msgid "Pin number:" +msgstr "" + +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 +msgid "Please choose a target" +msgstr "" + +#: ../editors/TextViewer.py:260 +msgid "Please enter a block name" +msgstr "" + +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +msgid "Please enter comment text" +msgstr "" + +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 +msgid "Please enter step name" +msgstr "" + +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +msgid "Please enter text" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:177 +#, python-format +msgid "Please enter value for a \"%s\" variable:" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be 0 <= port <= 65535!" +msgstr "" + +#: ../Beremiz_service.py:327 +msgid "Port number must be an integer!" +msgstr "" + +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +msgid "Power Rail" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:52 +msgid "Power Rail Properties" +msgstr "" + +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 +msgid "Preview" +msgstr "" + +#: ../dialogs/BlockPreviewDialog.py:59 +msgid "Preview:" +msgstr "" + +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 +msgid "Print" +msgstr "" + +#: ../IDEFrame.py:1110 +msgid "Print preview" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Priority" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:91 +msgid "Priority:" +msgstr "" + +#: ../runtime/PLCObject.py:518 +#, python-format +msgid "Problem starting PLC : error %d" +msgstr "" + +#: ../dialogs/ProjectDialog.py:63 +msgid "Product Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:90 +msgid "Product Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:92 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:64 +msgid "Product Version" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:91 +msgid "Product Version (required):" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 +msgid "Program" +msgstr "" + +#: ../PLCOpenEditor.py:321 +msgid "Program was successfully generated!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Programs" +msgstr "" + +#: ../editors/Viewer.py:285 +msgid "Programs can't be used by other POUs!" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +msgid "Project" +msgstr "" + +#: ../controls/SearchResultPanel.py:180 +#, python-format +msgid "Project '%s':" +msgstr "" + +#: ../ProjectController.py:1878 +msgid "Project Files" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Project Name" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:88 +msgid "Project Name (required):" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:89 +msgid "Project Version (optional):" +msgstr "" + +#: ../PLCControler.py:2717 +msgid "" +"Project file syntax error:\n" +"\n" +msgstr "" + +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 +msgid "Project properties" +msgstr "" + +#: ../ConfigTreeNode.py:571 +#, python-brace-format +msgid "Project tree layout do not match confnode.xml {a1}!={a2} " +msgstr "" + +#: ../dialogs/ConnectionDialog.py:101 +msgid "Propagate Name" +msgstr "" + +#: ../plcopen/types_enums.py:77 +msgid "Properties" +msgstr "" + +#: ../Beremiz_service.py:427 +msgid "Publishing service on local network" +msgstr "" + +#: ../connectors/PYRO/__init__.py:126 +#, python-format +msgid "Pyro exception: %s\n" +msgstr "" + +#: ../Beremiz_service.py:420 +msgid "Pyro port :" +msgstr "" + +#: ../py_ext/PythonEditor.py:84 +msgid "Python code" +msgstr "" + +#: ../features.py:34 +msgid "Python file" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Qualifier" +msgstr "" + +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +msgid "Quit" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +msgid "Range:" +msgstr "" + +#: ../ProjectController.py:1872 +msgid "Raw IEC code" +msgstr "" + +#: ../BeremizIDE.py:1083 +#, python-format +msgid "Really delete node '%s'?" +msgstr "" + +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 +msgid "Redo" +msgstr "" + +#: ../dialogs/SFCTransitionDialog.py:76 +msgid "Reference" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +msgid "Refresh" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:70 +msgid "Regular expression" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:99 +msgid "Regular expressions" +msgstr "" + +#: ../editors/Viewer.py:1636 +msgid "Release value" +msgstr "" + +#: ../plcopen/iec_std.csv:37 +msgid "Remainder (modulo)" +msgstr "" + +#: ../BeremizIDE.py:1084 +#, python-format +msgid "Remove %s node" +msgstr "" + +#: ../IDEFrame.py:2445 +msgid "Remove Datatype" +msgstr "" + +#: ../IDEFrame.py:2450 +msgid "Remove Pou" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:144 +msgid "Remove action" +msgstr "" + +#: ../editors/DataTypeEditor.py:365 +msgid "Remove element" +msgstr "" + +#: ../editors/FileManagementPanel.py:66 +msgid "Remove file from left folder" +msgstr "" + +#: ../editors/ResourceEditor.py:284 +msgid "Remove instance" +msgstr "" + +#: ../canfestival/NetworkEditor.py:111 +msgid "Remove slave" +msgstr "" + +#: ../editors/ResourceEditor.py:253 +msgid "Remove task" +msgstr "" + +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +msgid "Remove variable" +msgstr "" + +#: ../IDEFrame.py:1979 +msgid "Rename" +msgstr "" + +#: ../editors/FileManagementPanel.py:187 +msgid "Replace File" +msgstr "" + +#: ../editors/Viewer.py:598 +msgid "Replace Wire by connections" +msgstr "" + +#: ../plcopen/iec_std.csv:89 +msgid "Replacement (within)" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Reset" +msgstr "" + +#: ../editors/Viewer.py:681 +msgid "Reset Execution Order" +msgstr "" + +#: ../IDEFrame.py:453 +msgid "Reset Perspective" +msgstr "" + +#: ../controls/SearchResultPanel.py:103 +msgid "Reset search result" +msgstr "" + +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +msgid "Resources" +msgstr "" + +#: ../controls/VariablePanel.py:77 +msgid "Retain" +msgstr "" + +#: ../controls/VariablePanel.py:455 +msgid "Return Type:" +msgstr "" + +#: ../editors/Viewer.py:582 +msgid "Right" +msgstr "" + +#: ../dialogs/LDPowerRailDialog.py:65 +msgid "Right PowerRail" +msgstr "" + +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +msgid "Rising Edge" +msgstr "" + +#: ../plcopen/iec_std.csv:65 +msgid "Rotate left" +msgstr "" + +#: ../plcopen/iec_std.csv:64 +msgid "Rotate right" +msgstr "" + +#: ../plcopen/iec_std.csv:17 +msgid "Rounding up/down" +msgstr "" + +#: ../ProjectController.py:1828 +msgid "Run" +msgstr "" + +#: ../ProjectController.py:1127 +msgid "Runtime IO extensions C code generation failed !\n" +msgstr "" + +#: ../ProjectController.py:1136 +msgid "Runtime library extensions C code generation failed !\n" +msgstr "" + +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 +msgid "SDO Client" +msgstr "" + +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 +msgid "SDO Server" +msgstr "" + +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +msgid "SFC" +msgstr "" + +#: ../PLCGenerator.py:1433 +#, python-brace-format +msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" +msgstr "" + +#: ../PLCGenerator.py:780 +#, python-format +msgid "SFC transition in POU \"%s\" must be connected." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 +msgid "ST" +msgstr "" + +#: ../PLCOpenEditor.py:308 +msgid "ST files (*.st)|*.st|All files|*.*" +msgstr "" + +#: ../svgui/svgui.py:136 +msgid "SVG files (*.svg)|*.svg|All files|*.*" +msgstr "" + +#: ../features.py:36 +msgid "SVGUI" +msgstr "" + +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 +msgid "Save" +msgstr "" + +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 +msgid "Save As..." +msgstr "" + +#: ../BeremizIDE.py:249 +msgid "Save as" +msgstr "" + +#: ../ProjectController.py:530 +msgid "Save path is the same as path of a project! \n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:73 +msgid "Scope" +msgstr "" + +#: ../IDEFrame.py:644 +msgid "Search" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 +msgid "Search in Project" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:49 +msgid "Seconds:" +msgstr "" + +#: ../IDEFrame.py:390 +msgid "Select All" +msgstr "" + +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 +msgid "Select a variable class:" +msgstr "" + +#: ../ProjectController.py:1293 +msgid "Select an editor:" +msgstr "" + +#: ../controls/PouInstanceVariablesPanel.py:292 +msgid "Select an instance" +msgstr "" + +#: ../IDEFrame.py:628 +msgid "Select an object" +msgstr "" + +#: ../ProjectController.py:537 +msgid "Selected directory already contains another project. Overwrite? \n" +msgstr "" + +#: ../plcopen/iec_std.csv:70 +msgid "Selection" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:66 +msgid "Selection Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:65 +msgid "Selection Divergence" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:135 +msgid "Service Discovery" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:104 +msgid "Services available:" +msgstr "" + +#: ../dialogs/LDElementDialog.py:79 +msgid "Set" +msgstr "" + +#: ../plcopen/iec_std.csv:62 +msgid "Shift left" +msgstr "" + +#: ../plcopen/iec_std.csv:63 +msgid "Shift right" +msgstr "" + +#: ../ProjectController.py:1863 +msgid "Show IEC code generated by PLCGenerator" +msgstr "" + +#: ../canfestival/canfestival.py:407 +msgid "Show Master" +msgstr "" + +#: ../canfestival/canfestival.py:408 +msgid "Show Master generated by config_utils" +msgstr "" + +#: ../ProjectController.py:1862 +msgid "Show code" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:68 +msgid "Simultaneous Convergence" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:67 +msgid "Simultaneous Divergence" +msgstr "" + +#: ../plcopen/iec_std.csv:27 +msgid "Sine" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Single" +msgstr "" + +#: ../targets/toolchain_makefile.py:130 +msgid "Source didn't change, no build.\n" +msgstr "" + +#: ../PLCGenerator.py:404 +#, python-brace-format +msgid "" +"Source signal has to be defined for single task '{a1}' in resource " +"'{a2}.{a3}'." +msgstr "" + +#: ../plcopen/iec_std.csv:23 +msgid "Square root (base 2)" +msgstr "" + +#: ../plcopen/definitions.py:50 +msgid "Standard function blocks" +msgstr "" + +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +msgid "Start PLC" +msgstr "" + +#: ../ProjectController.py:1074 +#, python-format +msgid "Start build in %s\n" +msgstr "" + +#: ../ProjectController.py:1397 +msgid "Started" +msgstr "" + +#: ../ProjectController.py:1633 +msgid "Starting PLC\n" +msgstr "" + +#: ../BeremizIDE.py:393 +msgid "Status ToolBar" +msgstr "" + +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +msgid "Step" +msgstr "" + +#: ../ProjectController.py:1835 +msgid "Stop" +msgstr "" + +#: ../Beremiz_service.py:272 +msgid "Stop PLC" +msgstr "" + +#: ../ProjectController.py:1836 +msgid "Stop Running PLC" +msgstr "" + +#: ../ProjectController.py:1398 +msgid "Stopped" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Structure" +msgstr "" + +#: ../editors/DataTypeEditor.py:60 +msgid "Subrange" +msgstr "" + +#: ../plcopen/iec_std.csv:35 +msgid "Subtraction" +msgstr "" + +#: ../ProjectController.py:1113 +msgid "Successfully built.\n" +msgstr "" + +#: ../IDEFrame.py:449 +msgid "Switch perspective" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 +msgid "Syntax error in regular expression of pattern to search!" +msgstr "" + +#: ../dialogs/DiscoveryDialog.py:90 +msgid "TYPE" +msgstr "" + +#: ../plcopen/iec_std.csv:29 +msgid "Tangent" +msgstr "" + +#: ../editors/ResourceEditor.py:97 +msgid "Task" +msgstr "" + +#: ../editors/ResourceEditor.py:248 +msgid "Tasks:" +msgstr "" + +#: ../controls/VariablePanel.py:91 +msgid "Temp" +msgstr "" + +#: ../version.py:35 +msgid "" +"The best place to ask questions about Beremiz/PLCOpenEditor\n" +"is project's mailing list: beremiz-devel@lists.sourceforge.net\n" +"\n" +"This is the main community support channel.\n" +"For posting it is required to be subscribed to the mailing list.\n" +"\n" +"You can subscribe to the list here:\n" +"https://lists.sourceforge.net/lists/listinfo/beremiz-devel" +msgstr "" + +#: ../editors/FileManagementPanel.py:186 +#, python-format +msgid "" +"The file '%s' already exist.\n" +"Do you want to replace it?" +msgstr "" + +#: ../editors/LDViewer.py:893 +msgid "The group of block must be coherent!" +msgstr "" + +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +msgid "There are changes, do you want to save?" +msgstr "" + +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#, python-format +msgid "" +"There is a POU named \"%s\". This could cause a conflict. Do you wish to " +"continue?" +msgstr "" + +#: ../IDEFrame.py:1133 +msgid "" +"There was a problem printing.\n" +"Perhaps your current printer is not set correctly?" +msgstr "" + +#: ../editors/LDViewer.py:902 +msgid "This option isn't available yet!" +msgstr "" + +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#, python-format +msgid "Tick: %d" +msgstr "" + +#: ../plcopen/iec_std.csv:40 +msgid "Time" +msgstr "" + +#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41 +msgid "Time addition" +msgstr "" + +#: ../plcopen/iec_std.csv:86 +msgid "Time concatenation" +msgstr "" + +#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61 +msgid "Time division" +msgstr "" + +#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47 +msgid "Time multiplication" +msgstr "" + +#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49 +msgid "Time subtraction" +msgstr "" + +#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43 +msgid "Time-of-day addition" +msgstr "" + +#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53 +#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55 +msgid "Time-of-day subtraction" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:188 +msgid "Toggle value" +msgstr "" + +#: ../editors/Viewer.py:584 +msgid "Top" +msgstr "" + +#: ../ProjectController.py:1848 +msgid "Transfer" +msgstr "" + +#: ../ProjectController.py:1849 +msgid "Transfer PLC" +msgstr "" + +#: ../ProjectController.py:1802 +msgid "Transfer completed successfully.\n" +msgstr "" + +#: ../ProjectController.py:1805 +msgid "Transfer failed\n" +msgstr "" + +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 +msgid "Transition" +msgstr "" + +#: ../PLCGenerator.py:1564 +#, python-format +msgid "" +"Transition \"%s\" body must contain an output variable or coil referring to " +"its name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:91 +msgid "Transition Name" +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:60 +msgid "Transition Name:" +msgstr "" + +#: ../PLCGenerator.py:1657 +#, python-brace-format +msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:1646 +#, python-brace-format +msgid "" +"Transition with content \"{a1}\" not connected to a previous step in " +"\"{a2}\" POU" +msgstr "" + +#: ../plcopen/plcopen.py:1526 +#, python-format +msgid "Transition with name %s doesn't exist!" +msgstr "" + +#: ../plcopen/types_enums.py:76 +msgid "Transitions" +msgstr "" + +#: ../dialogs/AboutDialog.py:127 +msgid "Translated by" +msgstr "" + +#: ../editors/ResourceEditor.py:76 +msgid "Triggering" +msgstr "" + +#: ../Beremiz_service.py:490 +msgid "Twisted unavailable." +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 +msgid "Type" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:54 +msgid "Type and derivated" +msgstr "" + +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 +#, python-format +msgid "Type conflict for location \"%s\"" +msgstr "" + +#: ../plcopen/iec_std.csv:16 +msgid "Type conversion" +msgstr "" + +#: ../editors/DataTypeEditor.py:170 +msgid "Type infos:" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:55 +msgid "Type strict" +msgstr "" + +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 +msgid "Type:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 +#, python-format +msgid "Unable to define PDO mapping for node %02x" +msgstr "" + +#: ../targets/Xenomai/__init__.py:43 +#, python-format +msgid "Unable to get Xenomai's %s \n" +msgstr "" + +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#, python-brace-format +msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" +msgstr "" + +#: ../PLCGenerator.py:261 +#, python-format +msgid "Undefined pou type \"%s\"" +msgstr "" + +#: ../IDEFrame.py:365 ../IDEFrame.py:423 +msgid "Undo" +msgstr "" + +#: ../ProjectController.py:442 +msgid "Unknown" +msgstr "" + +#: ../editors/Viewer.py:437 +#, python-format +msgid "Unknown variable \"%s\" for this POU!" +msgstr "" + +#: ../ProjectController.py:439 ../ProjectController.py:440 +msgid "Unnamed" +msgstr "" + +#: ../PLCControler.py:263 +#, python-format +msgid "Unnamed%d" +msgstr "" + +#: ../controls/VariablePanel.py:308 +#, python-format +msgid "Unrecognized data size \"%s\"" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +msgid "User Data Types" +msgstr "" + +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 +msgid "User Type" +msgstr "" + +#: ../plcopen/types_enums.py:75 +msgid "User-defined POUs" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:42 +msgid "Value" +msgstr "" + +#: ../editors/DataTypeEditor.py:267 +msgid "Values:" +msgstr "" + +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 +msgid "Variable" +msgstr "" + +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +msgid "Variable Drop" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:68 +msgid "Variable Properties" +msgstr "" + +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 +msgid "Variable class" +msgstr "" + +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 +msgid "Variable don't belong to this POU!" +msgstr "" + +#: ../dialogs/LDElementDialog.py:92 +msgid "Variable:" +msgstr "" + +#: ../controls/VariablePanel.py:90 +msgid "Variables" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:166 +msgid "Vertical:" +msgstr "" + +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "" + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "" + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "" + +#: ../Beremiz_service.py:625 +msgid "WAMP client startup failed. " +msgstr "" + +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "" + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "" + +#: ../connectors/WAMP/__init__.py:99 +#, python-format +msgid "WAMP connecting to URL : %s\n" +msgstr "" + +#: ../connectors/WAMP/__init__.py:140 +msgid "WAMP connection timeout" +msgstr "" + +#: ../connectors/WAMP/__init__.py:158 +#, python-format +msgid "WAMP connection to '%s' failed.\n" +msgstr "" + +#: ../Beremiz_service.py:595 +msgid "WAMP import failed :" +msgstr "" + +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "" + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:44 +msgid "WXGLADE GUI" +msgstr "" + +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +msgid "Warning" +msgstr "" + +#: ../ProjectController.py:726 +msgid "Warnings in ST/IL/SFC code generator :\n" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:82 +msgid "Whole Project" +msgstr "" + +#: ../controls/ProjectPropertiesPanel.py:134 +msgid "Width:" +msgstr "" + +#: ../dialogs/FindInPouDialog.py:94 +msgid "Wrap search" +msgstr "" + +#: ../dialogs/AboutDialog.py:126 +msgid "Written by" +msgstr "" + +#: ../features.py:35 +msgid "WxGlade GUI" +msgstr "" + +#: ../svgui/svgui.py:150 +msgid "" +"You don't have write permissions.\n" +"Open Inkscape anyway ?" +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:160 +msgid "" +"You don't have write permissions.\n" +"Open wxGlade anyway ?" +msgstr "" + +#: ../ProjectController.py:390 +msgid "" +"You must have permission to work on the project\n" +"Work on a project copy ?" +msgstr "" + +#: ../editors/LDViewer.py:897 +msgid "" +"You must select the block or group of blocks around which a branch should be" +" added!" +msgstr "" + +#: ../editors/LDViewer.py:677 +msgid "You must select the wire where a contact should be added!" +msgstr "" + +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 +msgid "You must type a name!" +msgstr "" + +#: ../dialogs/ForceVariableDialog.py:209 +msgid "You must type a value!" +msgstr "" + +#: ../IDEFrame.py:440 +msgid "Zoom" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "days" +msgstr "" + +#: ../PLCOpenEditor.py:317 +#, python-format +msgid "error: %s\n" +msgstr "" + +#: ../util/ProcessLogger.py:178 +#, python-brace-format +msgid "exited with status {a1} (pid {a2})\n" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "function" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "functionBlock" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:158 +msgid "hours" +msgstr "" + +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:160 +msgid "milliseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "minutes" +msgstr "" + +#: ../dialogs/PouDialog.py:36 +msgid "program" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 +msgid "seconds" +msgstr "" + +#: ../plcopen/iec_std.csv:84 +msgid "string from the middle" +msgstr "" + +#: ../plcopen/iec_std.csv:82 +msgid "string left of" +msgstr "" + +#: ../plcopen/iec_std.csv:83 +msgid "string right of" +msgstr "" + +#: ../Beremiz.py:167 +msgid "update info unavailable." +msgstr "" + +#: ../PLCOpenEditor.py:315 +#, python-format +msgid "warning: %s\n" +msgstr "" + +#: ../PLCControler.py:576 +#, python-brace-format +msgid "{a1} \"{a2}\" can't be pasted as a {a3}." +msgstr "" + +#: ../ConfigTreeNode.py:58 +#, python-brace-format +msgid "" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" +"{a3}" +msgstr "" + +#: Extra XSD strings +msgid "CanFestivalSlaveNode" +msgstr "" + +msgid "CAN_Device" +msgstr "" + +msgid "CAN_Baudrate" +msgstr "" + +msgid "NodeId" +msgstr "" + +msgid "Sync_Align" +msgstr "" + +msgid "Sync_Align_Ratio" +msgstr "" + +msgid "CanFestivalNode" +msgstr "" + +msgid "Sync_TPDOs" +msgstr "" + +msgid "CanFestivalInstance" +msgstr "" + +msgid "CAN_Driver" +msgstr "" + +msgid "Generic" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Xenomai" +msgstr "" + +msgid "XenoConfig" +msgstr "" + +msgid "Compiler" +msgstr "" + +msgid "CFLAGS" +msgstr "" + +msgid "Linker" +msgstr "" + +msgid "LDFLAGS" +msgstr "" + +msgid "Linux" +msgstr "" + +msgid "Win32" +msgstr "" + +msgid "ModbusRequest" +msgstr "" + +msgid "SlaveID" +msgstr "" + +msgid "Nr_of_Channels" +msgstr "" + +msgid "Start_Address" +msgstr "" + +msgid "Timeout_in_ms" +msgstr "" + +msgid "MemoryArea" +msgstr "" + +msgid "MemoryAreaType" +msgstr "" + +msgid "ModbusTCPclient" +msgstr "" + +msgid "Remote_IP_Address" +msgstr "" + +msgid "Remote_Port_Number" +msgstr "" + +msgid "Invocation_Rate_in_ms" +msgstr "" + +msgid "ModbusServerNode" +msgstr "" + +msgid "Local_IP_Address" +msgstr "" + +msgid "Local_Port_Number" +msgstr "" + +msgid "ModbusRTUclient" +msgstr "" + +msgid "Serial_Port" +msgstr "" + +msgid "Baud_Rate" +msgstr "" + +msgid "Parity" +msgstr "" + +msgid "Stop_Bits" +msgstr "" + +msgid "ModbusRTUslave" +msgstr "" + +msgid "ModbusRoot" +msgstr "" + +msgid "MaxRemoteTCPclients" +msgstr "" + +msgid "BaseParams" +msgstr "" + +msgid "IEC_Channel" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "BeremizRoot" +msgstr "" + +msgid "TargetType" +msgstr "" + +msgid "Libraries" +msgstr "" + +msgid "URI_location" +msgstr "" + +msgid "Disable_Extensions" +msgstr "" + +msgid "%(codefile_name)s" +msgstr "" + +msgid "variables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "name" +msgstr "" + +msgid "type" +msgstr "" + +msgid "class" +msgstr "" + +msgid "initial" +msgstr "" + +msgid "desc" +msgstr "" + +msgid "onchange" +msgstr "" + +msgid "opts" +msgstr "" + +#: Extra TC6 documentation strings +msgid "0 - current time, 1 - load time from PDT" +msgstr "" + +msgid "Preset datetime" +msgstr "" + +msgid "Copy of IN" +msgstr "" + +msgid "Datetime, current or relative to PDT" +msgstr "" + +msgid "" +"The real time clock has many uses including time stamping, setting dates and" +" times of day in batch reports, in alarm messages and so on." +msgstr "" + +msgid "1 = integrate, 0 = hold" +msgstr "" + +msgid "Overriding reset" +msgstr "" + +msgid "Input variable" +msgstr "" + +msgid "Initial value" +msgstr "" + +msgid "Sampling period" +msgstr "" + +msgid "NOT R1" +msgstr "" + +msgid "Integrated output" +msgstr "" + +msgid "" +"The integral function block integrates the value of input XIN over time." +msgstr "" + +msgid "0 = reset" +msgstr "" + +msgid "Input to be differentiated" +msgstr "" + +msgid "Differentiated output" +msgstr "" + +msgid "" +"The derivative function block produces an output XOUT proportional to the " +"rate of change of the input XIN." +msgstr "" + +msgid "0 - manual , 1 - automatic" +msgstr "" + +msgid "Process variable" +msgstr "" + +msgid "Set point" +msgstr "" + +msgid "Manual output adjustment - Typically from transfer station" +msgstr "" + +msgid "Proportionality constant" +msgstr "" + +msgid "Reset time" +msgstr "" + +msgid "Derivative time constant" +msgstr "" + +msgid "PV - SP" +msgstr "" + +msgid "FB for integral term" +msgstr "" + +msgid "FB for derivative term" +msgstr "" + +msgid "" +"The PID (proportional, Integral, Derivative) function block provides the " +"classical three term controller for closed loop control." +msgstr "" + +msgid "0 - track X0, 1 - ramp to/track X1" +msgstr "" + +msgid "Ramp duration" +msgstr "" + +msgid "BUSY = 1 during ramping period" +msgstr "" + +msgid "Elapsed time of ramp" +msgstr "" + +msgid "The RAMP function block is modelled on example given in the standard." +msgstr "" + +msgid "" +"The hysteresis function block provides a hysteresis boolean output driven by" +" the difference of two floating point (REAL) inputs XIN1 and XIN2." +msgstr "" + +msgid "The SR bistable is a latch where the Set dominates." +msgstr "" + +msgid "The RS bistable is a latch where the Reset dominates." +msgstr "" + +msgid "" +"The semaphore provides a mechanism to allow software elements mutually " +"exclusive access to certain resources." +msgstr "" + +msgid "The output produces a single pulse when a rising edge is detected." +msgstr "" + +msgid "The output produces a single pulse when a falling edge is detected." +msgstr "" + +msgid "" +"The up-counter can be used to signal when a count has reached a maximum " +"value." +msgstr "" + +msgid "" +"The down-counter can be used to signal when a count has reached zero, on " +"counting down from a preset value." +msgstr "" + +msgid "" +"The up-down counter has two inputs CU and CD. It can be used to both count " +"up on one input and down on the other." +msgstr "" + +msgid "first input parameter" +msgstr "" + +msgid "second input parameter" +msgstr "" + +msgid "first output parameter" +msgstr "" + +msgid "second output parameter" +msgstr "" + +msgid "internal state: 0-reset, 1-counting, 2-set" +msgstr "" + +msgid "" +"The pulse timer can be used to generate output pulses of a given time " +"duration." +msgstr "" + +msgid "" +"The on-delay timer can be used to delay setting an output true, for fixed " +"period after an input becomes true." +msgstr "" + +msgid "" +"The off-delay timer can be used to delay setting an output false, for fixed " +"period after input goes false." +msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/Beremiz_zh_CN.po --- a/i18n/Beremiz_zh_CN.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Beremiz_zh_CN.po Fri Nov 23 00:33:04 2018 +0100 @@ -1,19 +1,16 @@ -# English translations for Beremiz package. -# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Beremiz package. -# Automatically generated, 2017. +# FIRST AUTHOR , YEAR. # -# Translators: -# Andrey Skvortsov , 2017 -# frank guan , 2017 -# Tango_Wu , 2017 +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 13:02+0300\n" -"PO-Revision-Date: 2017-07-05 13:02+0300\n" -"Last-Translator: Tango_Wu , 2017\n" +"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: yiwei Yan <523136664@qq.com>, 2017\n" "Language-Team: Chinese (China) (https://www.transifex.com/beremiz/teams/75746/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +18,7 @@ "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418 +#: ../util/ExceptionHandler.py:58 #, python-format msgid "" "\n" @@ -46,151 +43,156 @@ "\n" "追溯:\n" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " External" msgstr " 外部" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " InOut" msgstr " 输入输出" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Input" msgstr " 输入" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid " Local" msgstr " 本地" -#: ../controls/VariablePanel.py:71 +#: ../controls/VariablePanel.py:89 msgid " Output" msgstr " 输出" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid " Temp" msgstr "临时" -#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69 -#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114 +#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 #, python-format msgid " and %s" msgstr "和 %s" -#: ../ProjectController.py:1151 +#: ../ProjectController.py:1182 msgid " generation failed !\n" msgstr "生成失败!\n" -#: ../plcopen/plcopen.py:886 +#: ../plcopen/plcopen.py:1029 #, python-format msgid "\"%s\" Data Type doesn't exist !!!" msgstr "\"%s\" 数据类型尚不存在!!!" -#: ../plcopen/plcopen.py:904 +#: ../plcopen/plcopen.py:1047 #, python-format msgid "\"%s\" POU already exists !!!" msgstr "\"%s\"POU已经存在!!!" -#: ../plcopen/plcopen.py:925 +#: ../plcopen/plcopen.py:1068 #, python-format msgid "\"%s\" POU doesn't exist !!!" msgstr "\"%s\" POU不存在!!!" -#: ../editors/Viewer.py:247 +#: ../editors/Viewer.py:288 #, python-format msgid "\"%s\" can't use itself!" msgstr "\"%s\" 不能自己使用!" -#: ../IDEFrame.py:1655 ../IDEFrame.py:1674 +#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" 配置已存在!" -#: ../plcopen/plcopen.py:472 +#: ../plcopen/plcopen.py:531 #, python-format msgid "\"%s\" configuration already exists !!!" msgstr "\"%s\" 配置已存在!!!" -#: ../IDEFrame.py:1605 +#: ../plcopen/plcopen.py:540 +#, python-format +msgid "\"%s\" configuration doesn't exist !!!" +msgstr "“ %s ” 配置不存在!!!" + +#: ../IDEFrame.py:1638 #, python-format msgid "\"%s\" data type already exists!" msgstr "\"%s\" 数据类型已存在!" -#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220 -#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263 -#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375 -#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301 -#: ../controls/VariablePanel.py:396 +#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 +#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 +#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 +#: ../controls/VariablePanel.py:425 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "\"%s\" 元素对于此POU已经存在!" -#: ../BeremizIDE.py:897 +#: ../BeremizIDE.py:928 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "\"%s\" 文件夹不是有效的Beremiz项目\n" -#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101 -#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121 -#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484 -#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587 -#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773 -#: ../IDEFrame.py:1596 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 +#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 +#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 +#: ../IDEFrame.py:1629 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" 是一个关键词。它不能被使用!" -#: ../plcopen/plcopen.py:2417 +#: ../plcopen/plcopen.py:2836 #, python-format msgid "\"%s\" is an invalid value!" msgstr "\"%s\"不是有效值!" -#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391 +#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365 #, python-format msgid "\"%s\" is not a valid folder!" msgstr "\"%s\"不是有效文件夹!" -#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99 -#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48 -#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119 -#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482 -#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774 -#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 +#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 +#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 +#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\"不是有效标识符!" -#: ../IDEFrame.py:2410 +#: ../IDEFrame.py:2436 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "\"%s\"被一个或多个程序组织单元使用,你确定要继续吗? " -#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123 -#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346 -#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270 -#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350 -#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338 -#: ../IDEFrame.py:1614 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 +#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 +#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 +#: ../IDEFrame.py:1647 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\"编程组织单元已经存在!" -#: ../dialogs/SFCStepNameDialog.py:58 +#: ../dialogs/SFCStepNameDialog.py:62 #, python-format msgid "\"%s\" step already exists!" msgstr "\"%s\"步骤已经存在!" -#: ../editors/DataTypeEditor.py:550 +#: ../editors/DataTypeEditor.py:566 #, python-format msgid "\"%s\" value already defined!" msgstr "\"%s\" 值已经被定义!" -#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743 +#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759 #, python-format msgid "\"%s\" value isn't a valid array dimension!" msgstr "\"%s\" 值不是有效数组维数!" -#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750 +#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766 #, python-format msgid "" "\"%s\" value isn't a valid array dimension!\n" @@ -199,209 +201,205 @@ "\"%s\" 不是一个有效的数组维数值!\n" "右边的数值必须大于左边的数值。" -#: ../PLCGenerator.py:1101 +#: ../PLCGenerator.py:1133 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "\"{a1}\" 功能 被取消在 \"{a2}\" POU:没有输入被连接" -#: ../editors/Viewer.py:251 +#: ../editors/Viewer.py:292 #, python-brace-format msgid "\"{a1}\" is already used by \"{a2}\"!" msgstr "\"{a1}\" 被用在了 \"{a2}\"!" -#: ../plcopen/plcopen.py:496 +#: ../plcopen/plcopen.py:557 #, python-brace-format msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!" msgstr "\"{a1}\" 资源已经存在于 \"{a2}\" 配置 !!!" -#: ../plcopen/plcopen.py:514 +#: ../plcopen/plcopen.py:577 #, python-brace-format msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "\"{a1}\" 资源部存在于 \"{a2}\" 配置!!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 #, python-format msgid "%dd" msgstr "%dd" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 #, python-format msgid "%ds" msgstr "%ds" -#: ../PLCControler.py:1533 +#: ../PLCControler.py:1114 #, python-format msgid "%s Data Types" msgstr "%s 数据类型" -#: ../PLCControler.py:1516 +#: ../PLCControler.py:1097 #, python-format msgid "%s POUs" msgstr "%s POUs" -#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90 +#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97 #, python-format msgid "%s Profile" msgstr "%s Profile" -#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657 -#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677 -#: ../plcopen/plcopen.py:1687 +#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908 +#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929 +#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950 #, python-format msgid "%s body don't have instances!" msgstr "%s 未包含实例!" -#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712 -#: ../plcopen/plcopen.py:1719 +#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964 +#: ../plcopen/plcopen.py:1971 #, python-format msgid "%s body don't have text!" msgstr "%s 未包含文本!" -#: ../IDEFrame.py:386 +#: ../IDEFrame.py:388 msgid "&Add Element" msgstr "&增加元素" -#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121 -#: ../dialogs/AboutDialog.py:158 +#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117 +#: ../dialogs/AboutDialog.py:152 msgid "&Close" msgstr "&关闭" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:361 msgid "&Configuration" msgstr "&配置" -#: ../IDEFrame.py:345 +#: ../IDEFrame.py:350 msgid "&Data Type" msgstr "&数据类型" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:392 msgid "&Delete" msgstr "&删除" -#: ../IDEFrame.py:337 +#: ../IDEFrame.py:342 msgid "&Display" msgstr "&显示" -#: ../IDEFrame.py:336 +#: ../IDEFrame.py:341 msgid "&Edit" msgstr "&编辑" -#: ../IDEFrame.py:335 +#: ../IDEFrame.py:340 msgid "&File" msgstr "&文件" -#: ../IDEFrame.py:347 +#: ../IDEFrame.py:352 msgid "&Function" msgstr "&功能" -#: ../IDEFrame.py:338 +#: ../IDEFrame.py:343 msgid "&Help" msgstr "&帮助" -#: ../dialogs/AboutDialog.py:72 +#: ../dialogs/AboutDialog.py:70 msgid "&License" msgstr "&许可" -#: ../IDEFrame.py:351 +#: ../IDEFrame.py:356 msgid "&Program" msgstr "&程序" -#: ../PLCOpenEditor.py:127 +#: ../PLCOpenEditor.py:98 msgid "&Properties" msgstr "&属性" -#: ../BeremizIDE.py:219 +#: ../BeremizIDE.py:244 msgid "&Recent Projects" msgstr "&最近项目" -#: ../IDEFrame.py:353 +#: ../IDEFrame.py:358 msgid "&Resource" msgstr "&资源" -#: ../controls/SearchResultPanel.py:239 +#: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" msgstr "'{a1}' - {a2} 在项目中匹配" -#: ../controls/SearchResultPanel.py:241 +#: ../controls/SearchResultPanel.py:249 #, python-brace-format msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} 在项目中匹配" -#: ../connectors/PYRO/__init__.py:90 +#: ../connectors/PYRO/__init__.py:98 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' 位于 {a2}\n" -#: ../controls/SearchResultPanel.py:291 +#: ../controls/SearchResultPanel.py:298 #, python-format msgid "(%d matches)" msgstr "(%d 匹配)" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409 -msgid ", " -msgstr "," - -#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94 -#: ../dialogs/PouDialog.py:116 +#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:124 #, python-format msgid ", %s" msgstr ", %s" -#: ../PLCOpenEditor.py:404 -msgid ". " -msgstr "。" - -#: ../controls/LogViewer.py:279 +#: ../controls/UriLocationEditor.py:49 +msgid "- Select URI type -" +msgstr "- 选择 URI 类型 -" + +#: ../controls/LogViewer.py:287 msgid "1d" msgstr "1d" -#: ../controls/LogViewer.py:280 +#: ../controls/LogViewer.py:288 msgid "1h" msgstr "1h" -#: ../controls/LogViewer.py:281 +#: ../controls/LogViewer.py:289 msgid "1m" msgstr "1m" -#: ../controls/LogViewer.py:282 +#: ../controls/LogViewer.py:290 msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663 -#: ../IDEFrame.py:1682 +#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 +#: ../IDEFrame.py:1715 #, python-format msgid "" "A POU has an element named \"%s\". This could cause a conflict. Do you wish " "to continue?" msgstr "一个编程组织单元的成员被命名为\"%s\"。这可能会产生冲突。你希望继续吗?" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103 -#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101 -#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 +#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "一个以\"%s\"命名的的编程组织单元已经存在!" @@ -411,26 +409,26 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "一个子命名的 \"{a1}\" 已经存在 -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:218 +#: ../dialogs/BrowseLocationsDialog.py:229 msgid "A location must be selected!" msgstr "一个定位必须被选择!" -#: ../editors/ResourceEditor.py:451 +#: ../editors/ResourceEditor.py:485 msgid "A task with the same name already exists!" msgstr "相同名称的任务已经存在!" -#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777 -#: ../IDEFrame.py:1633 ../IDEFrame.py:1646 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 +#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "一个以\"%s\"命名的变量在这个编程组织单元中已经存在!" -#: ../editors/CodeFileEditor.py:780 +#: ../editors/CodeFileEditor.py:778 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "一个变量以 \"%s\" 作为名字已经存在!" -#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168 +#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142 msgid "About" msgstr "关于" @@ -438,125 +436,125 @@ msgid "Absolute number" msgstr "绝对值" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "动作" -#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394 +#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 msgid "Action Block" msgstr "动作控制功能块" -#: ../dialogs/PouActionDialog.py:82 +#: ../dialogs/PouActionDialog.py:89 msgid "Action Name" msgstr "动作名字" -#: ../dialogs/PouActionDialog.py:49 +#: ../dialogs/PouActionDialog.py:56 msgid "Action Name:" msgstr "动作名字:" -#: ../plcopen/plcopen.py:1364 +#: ../plcopen/plcopen.py:1567 #, python-format msgid "Action with name %s doesn't exist!" msgstr "一个以\"%s\"命名的的行动不存在!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Actions" msgstr "动作" -#: ../dialogs/ActionBlockDialog.py:133 +#: ../dialogs/ActionBlockDialog.py:139 msgid "Actions:" msgstr "动作:" -#: ../editors/Viewer.py:431 +#: ../editors/Viewer.py:473 msgid "Active" msgstr "活动" -#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101 -#: ../BeremizIDE.py:965 ../editors/Viewer.py:647 +#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 msgid "Add" msgstr "添加" -#: ../IDEFrame.py:1893 ../IDEFrame.py:1928 +#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 msgid "Add Action" msgstr "添加动作" -#: ../features.py:32 +#: ../features.py:33 msgid "Add C code accessing located variables synchronously" msgstr "同步的增加C代码访问定位的变量" -#: ../IDEFrame.py:1876 +#: ../IDEFrame.py:1907 msgid "Add Configuration" msgstr "添加配置" -#: ../IDEFrame.py:1856 +#: ../IDEFrame.py:1887 msgid "Add DataType" msgstr "添加数据类型" -#: ../editors/Viewer.py:572 +#: ../editors/Viewer.py:609 msgid "Add Divergence Branch" msgstr "添加发散分支" -#: ../dialogs/DiscoveryDialog.py:117 +#: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "添加 IP" -#: ../IDEFrame.py:1864 +#: ../IDEFrame.py:1895 msgid "Add POU" msgstr "添加 POU" -#: ../features.py:33 +#: ../features.py:34 msgid "Add Python code executed asynchronously" msgstr "添加异步执行的Python代码" -#: ../IDEFrame.py:1904 ../IDEFrame.py:1954 +#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 msgid "Add Resource" msgstr "添加源" -#: ../IDEFrame.py:1882 ../IDEFrame.py:1925 +#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 msgid "Add Transition" msgstr "添加跃迁" -#: ../editors/Viewer.py:559 +#: ../editors/Viewer.py:596 msgid "Add Wire Segment" msgstr "添加布线段" -#: ../editors/SFCViewer.py:433 +#: ../editors/SFCViewer.py:447 msgid "Add a new initial step" msgstr "新建一个初始步骤" -#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "新建一个跳跃" -#: ../editors/SFCViewer.py:455 +#: ../editors/SFCViewer.py:469 msgid "Add a new step" msgstr "添加一个新步骤" -#: ../features.py:34 +#: ../features.py:35 msgid "Add a simple WxGlade based GUI." msgstr "添加一个简单的基于 WxGlade的 GUI." -#: ../dialogs/ActionBlockDialog.py:137 +#: ../dialogs/ActionBlockDialog.py:143 msgid "Add action" msgstr "添加动作" -#: ../editors/DataTypeEditor.py:352 +#: ../editors/DataTypeEditor.py:364 msgid "Add element" msgstr "添加元素" -#: ../editors/ResourceEditor.py:268 +#: ../editors/ResourceEditor.py:283 msgid "Add instance" msgstr "添加实例" -#: ../canfestival/NetworkEditor.py:103 +#: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "添加从站" -#: ../editors/ResourceEditor.py:239 +#: ../editors/ResourceEditor.py:252 msgid "Add task" msgstr "添加任务" -#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450 +#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 msgid "Add variable" msgstr "添加变量" @@ -564,44 +562,44 @@ msgid "Addition" msgstr "加法" -#: ../plcopen/definitions.py:49 +#: ../plcopen/definitions.py:51 msgid "Additional function blocks" msgstr "附加功能类型" -#: ../editors/Viewer.py:630 +#: ../editors/Viewer.py:669 msgid "Adjust Block Size" msgstr "调整块尺寸" -#: ../editors/Viewer.py:1686 +#: ../editors/Viewer.py:1720 msgid "Alignment" msgstr "对准" -#: ../dialogs/BrowseLocationsDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:48 -#: ../dialogs/BrowseLocationsDialog.py:141 -#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298 -#: ../controls/VariablePanel.py:70 +#: ../dialogs/BrowseLocationsDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:53 +#: ../dialogs/BrowseLocationsDialog.py:152 +#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:88 msgid "All" msgstr "所有" -#: ../editors/FileManagementPanel.py:35 +#: ../editors/FileManagementPanel.py:37 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "所有文件 (*.*)|*.*|CSV 文件 (*.csv)|*.csv" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1670 msgid "Already connected. Please disconnect\n" msgstr "已经连接。请断开连接\n" -#: ../editors/DataTypeEditor.py:591 +#: ../editors/DataTypeEditor.py:607 #, python-format msgid "An element named \"%s\" already exists in this structure!" msgstr "一个以\"%s\"命名的元素已经在这个结构中存在!" -#: ../editors/ResourceEditor.py:486 +#: ../editors/ResourceEditor.py:520 msgid "An instance with the same name already exists!" msgstr "相同名称的实例已经存在!" -#: ../dialogs/ConnectionDialog.py:100 +#: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "应用名称修改到所有伴随相同名称的延续" @@ -621,8 +619,8 @@ msgid "Arithmetic" msgstr "运算" -#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633 -#: ../controls/VariablePanel.py:858 +#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 +#: ../controls/VariablePanel.py:872 msgid "Array" msgstr "阵列的" @@ -630,45 +628,37 @@ msgid "Assignment" msgstr "分配" -#: ../dialogs/FBDVariableDialog.py:222 +#: ../dialogs/FBDVariableDialog.py:226 msgid "At least a variable or an expression must be selected!" msgstr "至少选择一个变量或者表达式!" -#: ../controls/ProjectPropertiesPanel.py:100 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Author" msgstr "作者" -#: ../controls/ProjectPropertiesPanel.py:97 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Author Name (optional):" msgstr "作者姓名(选填):" -#: ../dialogs/FindInPouDialog.py:77 +#: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "反向" -#: ../util/Zeroconf.py:599 -msgid "Bad domain name (circular) at " -msgstr "不好域名称(循环的)在" - -#: ../util/Zeroconf.py:602 -msgid "Bad domain name at " -msgstr "不好的域名称在" - -#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630 +#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" msgstr "不好的位置大小:%s" -#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175 -#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297 +#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183 +#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307 msgid "Base Type:" msgstr "基类型:" -#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 msgid "Base Types" msgstr "基类型" -#: ../BeremizIDE.py:455 +#: ../BeremizIDE.py:483 msgid "Beremiz" msgstr "Beremiz" @@ -700,85 +690,85 @@ msgid "Bitwise inverting" msgstr "按位“反向”" -#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407 +#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 msgid "Block" msgstr "块" -#: ../dialogs/FBDBlockDialog.py:60 +#: ../dialogs/FBDBlockDialog.py:63 msgid "Block Properties" msgstr "块属性" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Block name" msgstr "块名称" -#: ../editors/Viewer.py:550 +#: ../editors/Viewer.py:586 msgid "Bottom" msgstr "底部" -#: ../ProjectController.py:1363 +#: ../ProjectController.py:1400 msgid "Broken" msgstr "损坏" -#: ../dialogs/BrowseValuesLibraryDialog.py:38 +#: ../dialogs/BrowseValuesLibraryDialog.py:40 #, python-format msgid "Browse %s values library" msgstr "浏览 %s 值库" -#: ../dialogs/BrowseLocationsDialog.py:65 +#: ../dialogs/BrowseLocationsDialog.py:72 msgid "Browse Locations" msgstr "浏览定位" -#: ../ProjectController.py:1832 +#: ../ProjectController.py:1815 msgid "Build" msgstr "构建" -#: ../ProjectController.py:1297 +#: ../ProjectController.py:1335 msgid "Build directory already clean\n" msgstr "构建目录已经清除\n" -#: ../ProjectController.py:1833 +#: ../ProjectController.py:1816 msgid "Build project into build folder" msgstr "在构建文件夹中构建项目" -#: ../ProjectController.py:1080 +#: ../ProjectController.py:1108 msgid "C Build crashed !\n" msgstr "C构建损坏!\n" -#: ../ProjectController.py:1077 +#: ../ProjectController.py:1105 msgid "C Build failed.\n" msgstr "C构建失败。\n" -#: ../c_ext/CFileEditor.py:63 +#: ../c_ext/CFileEditor.py:66 msgid "C code" msgstr "C 代码" -#: ../ProjectController.py:1155 +#: ../ProjectController.py:1186 msgid "C code generated successfully.\n" msgstr "C代码生成成功。\n" -#: ../targets/toolchain_makefile.py:122 +#: ../targets/toolchain_makefile.py:126 msgid "C compilation failed.\n" msgstr "C编译失败。\n" -#: ../targets/toolchain_gcc.py:192 +#: ../targets/toolchain_gcc.py:199 #, python-format msgid "C compilation of %s failed.\n" msgstr " %s 的C编译失败。\n" -#: ../features.py:32 +#: ../features.py:33 msgid "C extension" msgstr "C扩展" -#: ../dialogs/AboutDialog.py:71 +#: ../dialogs/AboutDialog.py:69 msgid "C&redits" msgstr "C&redits" -#: ../canfestival/NetworkEditor.py:52 +#: ../canfestival/NetworkEditor.py:58 msgid "CANOpen network" msgstr "CANOpen 网络" -#: ../canfestival/SlaveEditor.py:44 +#: ../canfestival/SlaveEditor.py:48 msgid "CANOpen slave" msgstr "CANOpen 从站" @@ -786,34 +776,34 @@ msgid "CANopen support" msgstr "CANOpen 支持" -#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603 -#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643 +#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 +#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "在功能块网络,只能生成执行命令!" -#: ../controls/VariablePanel.py:267 +#: ../controls/VariablePanel.py:291 msgid "Can only give a location to local or global variables" msgstr "只能影响本地或全局变量的位置" -#: ../PLCOpenEditor.py:344 +#: ../PLCOpenEditor.py:318 #, python-format msgid "Can't generate program to file %s!" msgstr "这个编程生成文件失败 %s!" -#: ../controls/VariablePanel.py:265 +#: ../controls/VariablePanel.py:289 msgid "Can't give a location to a function block instance" msgstr "不能影响功能块实例的位置" -#: ../PLCOpenEditor.py:389 +#: ../PLCOpenEditor.py:363 #, python-format msgid "Can't save project to file %s!" msgstr "这个项目保存为文件失败 %s!" -#: ../controls/VariablePanel.py:313 +#: ../controls/VariablePanel.py:339 msgid "Can't set an initial value to a function block instance" msgstr "不能设置一个初始值到一个功能块实例" -#: ../ConfigTreeNode.py:529 +#: ../ConfigTreeNode.py:532 #, python-brace-format msgid "Cannot create child {a1} of type {a2} " msgstr "不能创建类型 {a2} 的子类型 {a1} " @@ -823,46 +813,50 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "无法找到比 %d 更低的自由的IEC通道\n" -#: ../connectors/PYRO/__init__.py:131 +#: ../connectors/PYRO/__init__.py:139 msgid "Cannot get PLC status - connection failed.\n" msgstr "无法获取PLC的状态 - 连接失败。\n" -#: ../ProjectController.py:943 +#: ../ProjectController.py:967 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "无法打开/解析 VARIABLES.csv!\n" -#: ../canfestival/config_utils.py:374 +#: ../canfestival/config_utils.py:400 #, python-brace-format msgid "" "Cannot set bit offset for non bool '{a1}' variable " "(ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "不能设置位偏移对于非布尔 '{a1}' 变量 (ID:{a2},Idx:{a3},sIdx:{a4}))" -#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86 +#: ../ProjectController.py:1761 +msgid "Cannot transfer while PLC is running. Stop it now?" +msgstr "在PLC运行时,不能传输!现在停止运行吗?" + +#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89 msgid "Case sensitive" msgstr "区分大小写" -#: ../editors/Viewer.py:545 +#: ../editors/Viewer.py:581 msgid "Center" msgstr "中" -#: ../Beremiz_service.py:268 +#: ../Beremiz_service.py:276 msgid "Change IP of interface to bind" msgstr "更改界面的ip用以绑定" -#: ../Beremiz_service.py:267 +#: ../Beremiz_service.py:275 msgid "Change Name" msgstr "更改名字" -#: ../IDEFrame.py:1946 +#: ../IDEFrame.py:1977 msgid "Change POU Type To" msgstr "将POU类型转换为" -#: ../Beremiz_service.py:269 +#: ../Beremiz_service.py:277 msgid "Change Port Number" msgstr "更改端口号" -#: ../Beremiz_service.py:270 +#: ../Beremiz_service.py:278 msgid "Change working directory" msgstr "更改工作目录" @@ -870,115 +864,119 @@ msgid "Character string" msgstr "字符串" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "Choose a SVG file" msgstr "选择一个SVG文件" -#: ../ProjectController.py:542 +#: ../ProjectController.py:561 msgid "Choose a directory to save project" msgstr "选择一个目录保存项目" -#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302 -#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383 +#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 +#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "选择一个文件" -#: ../BeremizIDE.py:833 ../BeremizIDE.py:869 +#: ../BeremizIDE.py:900 msgid "Choose a project" msgstr "选择一个项目" -#: ../dialogs/BrowseValuesLibraryDialog.py:41 +#: ../dialogs/BrowseValuesLibraryDialog.py:43 #, python-format msgid "Choose a value for %s:" msgstr "这对 %s选择一个值:" -#: ../Beremiz_service.py:325 +#: ../Beremiz_service.py:333 msgid "Choose a working directory " msgstr "选择一个工作目录" -#: ../ProjectController.py:449 +#: ../BeremizIDE.py:864 +msgid "Choose an empty directory for new project" +msgstr "选择一个空白目录以保存项目" + +#: ../ProjectController.py:468 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "被选中的文件夹未包含一个程序。它不是一个有效项目!" -#: ../ProjectController.py:416 +#: ../ProjectController.py:435 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "被选中的文件夹非空。你不能用它创建一个新项目!" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:60 msgid "Class" msgstr "分类" -#: ../controls/VariablePanel.py:441 +#: ../controls/VariablePanel.py:472 msgid "Class Filter:" msgstr "类过滤器:" -#: ../dialogs/FBDVariableDialog.py:70 +#: ../dialogs/FBDVariableDialog.py:74 msgid "Class:" msgstr "分类:" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1821 msgid "Clean" msgstr "清除" -#: ../controls/LogViewer.py:318 +#: ../controls/LogViewer.py:327 msgid "Clean log messages" msgstr "清楚记录信息" -#: ../ProjectController.py:1838 +#: ../ProjectController.py:1822 msgid "Clean project build folder" msgstr "清除项目构建目录" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1332 msgid "Cleaning the build directory\n" msgstr "清除构建目录\n" -#: ../IDEFrame.py:435 +#: ../IDEFrame.py:437 msgid "Clear Errors" msgstr "清楚错误" -#: ../editors/Viewer.py:641 +#: ../editors/Viewer.py:680 msgid "Clear Execution Order" msgstr "清空执行命令" -#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109 +#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 msgid "Close" msgstr "关闭" -#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209 +#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "关闭应用" -#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110 -#: ../IDEFrame.py:1013 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1040 msgid "Close Project" msgstr "关闭项目" -#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108 +#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79 msgid "Close Tab" msgstr "关闭标签" -#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415 +#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 msgid "Coil" msgstr "线圈" -#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506 +#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 msgid "Comment" msgstr "注释" -#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161 -#: ../PLCOpenEditor.py:164 +#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 +#: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "社区支持" -#: ../dialogs/ProjectDialog.py:60 +#: ../dialogs/ProjectDialog.py:65 msgid "Company Name" msgstr "公司名称" -#: ../controls/ProjectPropertiesPanel.py:95 +#: ../controls/ProjectPropertiesPanel.py:106 msgid "Company Name (required):" msgstr "公司名字(必须):" -#: ../controls/ProjectPropertiesPanel.py:96 +#: ../controls/ProjectPropertiesPanel.py:107 msgid "Company URL (optional):" msgstr "公司网址(选填):" @@ -986,7 +984,7 @@ msgid "Comparison" msgstr "比较" -#: ../ProjectController.py:734 +#: ../ProjectController.py:756 msgid "Compiling IEC Program into C code...\n" msgstr "正在将IEC程序编译成C代码...\n" @@ -994,93 +992,93 @@ msgid "Concatenation" msgstr "级联" -#: ../editors/ConfTreeNodeEditor.py:230 +#: ../editors/ConfTreeNodeEditor.py:241 msgid "Config" msgstr "配置" -#: ../editors/ProjectNodeEditor.py:36 +#: ../editors/ProjectNodeEditor.py:39 msgid "Config variables" msgstr "配置变量" -#: ../dialogs/SearchInProjectDialog.py:40 +#: ../dialogs/SearchInProjectDialog.py:43 msgid "Configuration" msgstr "配置" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Configurations" msgstr "配置" -#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360 -#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342 -#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328 +#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 +#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 msgid "Confirm or change variable name" msgstr "确认或变更变量名称" -#: ../ProjectController.py:1851 +#: ../ProjectController.py:1842 msgid "Connect" msgstr "连接" -#: ../ProjectController.py:1852 +#: ../ProjectController.py:1843 msgid "Connect to the target PLC" msgstr "连接到PLC目标" -#: ../ProjectController.py:1354 +#: ../ProjectController.py:1391 #, python-format msgid "Connected to URI: %s" msgstr "连接到URI: %s" -#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586 -#: ../editors/Viewer.py:2408 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 +#: ../editors/Viewer.py:2441 msgid "Connection" msgstr "连接" -#: ../dialogs/ConnectionDialog.py:53 +#: ../dialogs/ConnectionDialog.py:55 msgid "Connection Properties" msgstr "连接属性" -#: ../ProjectController.py:1709 +#: ../ProjectController.py:1691 msgid "Connection canceled!\n" msgstr "取消连接!\n" -#: ../ProjectController.py:1734 +#: ../ProjectController.py:1714 #, python-format msgid "Connection failed to %s!\n" msgstr "连接失败 %s!\n" -#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111 +#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 msgid "Connection lost!\n" msgstr "失去连接!\n" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:110 #, python-format msgid "Connection to '%s' failed.\n" msgstr "连接到 '%s' 失败。\n" -#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 msgid "Connector" msgstr "连接" -#: ../dialogs/SFCStepDialog.py:66 +#: ../dialogs/SFCStepDialog.py:68 msgid "Connectors:" msgstr "连接:" -#: ../BeremizIDE.py:350 +#: ../BeremizIDE.py:378 msgid "Console" msgstr "控制台" -#: ../controls/VariablePanel.py:60 +#: ../controls/VariablePanel.py:75 msgid "Constant" msgstr "常量" -#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411 +#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 msgid "Contact" msgstr "连接" -#: ../controls/ProjectPropertiesPanel.py:198 +#: ../controls/ProjectPropertiesPanel.py:217 msgid "Content Description (optional):" msgstr "内容描述(选填):" -#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 msgid "Continuation" msgstr "连续" @@ -1100,20 +1098,20 @@ msgid "Conversion to time-of-day" msgstr "转换为日期时间" -#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370 -#: ../IDEFrame.py:425 +#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 +#: ../IDEFrame.py:427 msgid "Copy" msgstr "复制" -#: ../IDEFrame.py:1933 +#: ../IDEFrame.py:1964 msgid "Copy POU" msgstr "复制POU" -#: ../editors/FileManagementPanel.py:65 +#: ../editors/FileManagementPanel.py:68 msgid "Copy file from left folder to right" msgstr "从左侧文件夹中复制文件到右侧" -#: ../editors/FileManagementPanel.py:64 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from right folder to left" msgstr "从右侧文件夹中复制文件到左侧" @@ -1121,7 +1119,7 @@ msgid "Cosine" msgstr "余弦" -#: ../ConfigTreeNode.py:656 +#: ../ConfigTreeNode.py:660 #, python-brace-format msgid "" "Could not add child \"{a1}\", type {a2} :\n" @@ -1130,12 +1128,12 @@ "不能增加子 \"{a1}\",类型 {a2} :\n" "{a3}\n" -#: ../py_ext/PythonFileCTNMixin.py:78 +#: ../py_ext/PythonFileCTNMixin.py:81 #, python-format msgid "Couldn't import old %s file." msgstr "不能导入旧 %s 文件。" -#: ../ConfigTreeNode.py:626 +#: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" "Couldn't load confnode base parameters {a1} :\n" @@ -1144,7 +1142,7 @@ "不能加载 confnode 基础参数 {a1} :\n" " {a2}" -#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124 +#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127 #, python-brace-format msgid "" "Couldn't load confnode parameters {a1} :\n" @@ -1153,111 +1151,107 @@ "不能加载 confnode 参数 {a1} :\n" " {a2}" -#: ../PLCControler.py:948 +#: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "不能粘贴 非-POU 目标。" -#: ../ProjectController.py:1651 +#: ../ProjectController.py:1636 msgid "Couldn't start PLC !\n" msgstr "无法开始PLC!\n" -#: ../ProjectController.py:1659 +#: ../ProjectController.py:1644 msgid "Couldn't stop PLC !\n" msgstr "无法停止PLC!\n" -#: ../ProjectController.py:1623 -msgid "Couldn't stop debugger.\n" -msgstr "不能停止调试器。\n" - -#: ../svgui/svgui.py:49 +#: ../svgui/svgui.py:57 msgid "Create HMI" msgstr "新建 HMI" -#: ../dialogs/PouDialog.py:46 +#: ../dialogs/PouDialog.py:54 msgid "Create a new POU" msgstr "新建一个POU" -#: ../dialogs/PouActionDialog.py:38 +#: ../dialogs/PouActionDialog.py:45 msgid "Create a new action" msgstr "新建一个动作" -#: ../IDEFrame.py:159 +#: ../IDEFrame.py:166 msgid "Create a new action block" msgstr "新建一个动作控制功能块" -#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171 +#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 msgid "Create a new block" msgstr "新建一个块" -#: ../IDEFrame.py:132 +#: ../IDEFrame.py:139 msgid "Create a new branch" msgstr "新建一个支流" -#: ../IDEFrame.py:126 +#: ../IDEFrame.py:133 msgid "Create a new coil" msgstr "新建一个线圈" -#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147 +#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 msgid "Create a new comment" msgstr "新建一个备注" -#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174 +#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 msgid "Create a new connection" msgstr "新建一个连接" -#: ../IDEFrame.py:129 ../IDEFrame.py:180 +#: ../IDEFrame.py:136 ../IDEFrame.py:187 msgid "Create a new contact" msgstr "新建一个接触点" -#: ../IDEFrame.py:162 +#: ../IDEFrame.py:169 msgid "Create a new divergence" msgstr "新建一个发散" -#: ../dialogs/SFCDivergenceDialog.py:53 +#: ../dialogs/SFCDivergenceDialog.py:54 msgid "Create a new divergence or convergence" msgstr "新建一个发散或者收敛" -#: ../IDEFrame.py:150 +#: ../IDEFrame.py:157 msgid "Create a new initial step" msgstr "新建一个初始步骤" -#: ../IDEFrame.py:165 +#: ../IDEFrame.py:172 msgid "Create a new jump" msgstr "新建一个跳跃" -#: ../IDEFrame.py:120 ../IDEFrame.py:177 +#: ../IDEFrame.py:127 ../IDEFrame.py:184 msgid "Create a new power rail" msgstr "新建一个电源导轨" -#: ../IDEFrame.py:123 +#: ../IDEFrame.py:130 msgid "Create a new rung" msgstr "新建一个梯级" -#: ../IDEFrame.py:153 +#: ../IDEFrame.py:160 msgid "Create a new step" msgstr "新建一个步骤" -#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156 +#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 msgid "Create a new transition" msgstr "新建一个跃迁" -#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168 +#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 msgid "Create a new variable" msgstr "新建一个变量" -#: ../dialogs/AboutDialog.py:113 +#: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "关于作者" -#: ../Beremiz_service.py:434 +#: ../Beremiz_service.py:424 msgid "Current working directory :" msgstr "当前工作目录:" -#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424 +#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 msgid "Cut" msgstr "剪切" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Cyclic" msgstr "循环" @@ -1269,19 +1263,19 @@ msgid "DEPRECATED" msgstr "DEPRECATED" -#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97 +#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104 msgid "DS-301 Profile" msgstr "DS-301 配置" -#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98 +#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105 msgid "DS-302 Profile" msgstr "DS-302 配置" -#: ../dialogs/SearchInProjectDialog.py:36 +#: ../dialogs/SearchInProjectDialog.py:39 msgid "Data Type" msgstr "数据类型" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Data Types" msgstr "数据类型 " @@ -1302,66 +1296,58 @@ msgid "Date subtraction" msgstr "日期减法" -#: ../dialogs/DurationEditorDialog.py:44 +#: ../dialogs/DurationEditorDialog.py:46 msgid "Days:" msgstr "日:" -#: ../ProjectController.py:1756 +#: ../ProjectController.py:1729 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "调试部匹配PLC - 停止/传输/启动 来新启用\n" -#: ../controls/PouInstanceVariablesPanel.py:134 +#: ../controls/PouInstanceVariablesPanel.py:144 msgid "Debug instance" msgstr "调试实例" -#: ../editors/Viewer.py:448 +#: ../editors/Viewer.py:490 #, python-format msgid "Debug: %s" msgstr "调试:%s" -#: ../ProjectController.py:1412 +#: ../ProjectController.py:1471 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "调试:未知变量 '%s'\n" -#: ../ProjectController.py:1410 +#: ../ProjectController.py:1469 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "调试:不支持的类型进行调试 '%s'\n" -#: ../IDEFrame.py:639 +#: ../IDEFrame.py:660 msgid "Debugger" msgstr "调试器" -#: ../ProjectController.py:1592 -msgid "Debugger disabled\n" -msgstr "调试器禁用\n" - -#: ../ProjectController.py:1753 +#: ../ProjectController.py:1726 msgid "Debugger ready\n" msgstr "调试器准备好\n" -#: ../ProjectController.py:1625 -msgid "Debugger stopped.\n" -msgstr "调试器停止。\n" - -#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962 +#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 msgid "Delete" msgstr "删除" -#: ../editors/Viewer.py:573 +#: ../editors/Viewer.py:610 msgid "Delete Divergence Branch" msgstr "删除发散分支" -#: ../editors/FileManagementPanel.py:153 +#: ../editors/FileManagementPanel.py:157 msgid "Delete File" msgstr "删除文件" -#: ../editors/Viewer.py:560 +#: ../editors/Viewer.py:597 msgid "Delete Wire Segment" msgstr "删除布线段" -#: ../controls/CustomEditableListBox.py:41 +#: ../controls/CustomEditableListBox.py:44 msgid "Delete item" msgstr "删除项目" @@ -1369,47 +1355,47 @@ msgid "Deletion (within)" msgstr "删除" -#: ../editors/DataTypeEditor.py:153 +#: ../editors/DataTypeEditor.py:161 msgid "Derivation Type:" msgstr "推导类型:" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:735 msgid "Description" msgstr "描述" -#: ../controls/VariablePanel.py:432 +#: ../controls/VariablePanel.py:463 msgid "Description:" msgstr "描述:" -#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321 +#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332 msgid "Dimensions:" msgstr "维数:" -#: ../dialogs/FindInPouDialog.py:66 +#: ../dialogs/FindInPouDialog.py:69 msgid "Direction" msgstr "方向" -#: ../dialogs/BrowseLocationsDialog.py:91 +#: ../dialogs/BrowseLocationsDialog.py:102 msgid "Direction:" msgstr "方向:" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Directly" msgstr "直接的" -#: ../ProjectController.py:1860 +#: ../ProjectController.py:1855 msgid "Disconnect" msgstr "断开" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1856 msgid "Disconnect from PLC" msgstr "从PLC断开" -#: ../ProjectController.py:1364 +#: ../ProjectController.py:1401 msgid "Disconnected" msgstr "已断开" -#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 msgid "Divergence" msgstr "偏差" @@ -1417,120 +1403,120 @@ msgid "Division" msgstr "除法" -#: ../editors/FileManagementPanel.py:152 +#: ../editors/FileManagementPanel.py:156 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "你真的想删除这个文件 '%s' ?" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:65 msgid "Documentation" msgstr "文档" -#: ../PLCOpenEditor.py:338 +#: ../PLCOpenEditor.py:312 msgid "Done" msgstr "完成" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "时间" -#: ../canfestival/canfestival.py:165 +#: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS 文件 (*.eds)|*.eds|All files|*.*" -#: ../editors/Viewer.py:629 +#: ../editors/Viewer.py:668 msgid "Edit Block" msgstr "编辑块" -#: ../dialogs/LDElementDialog.py:56 +#: ../dialogs/LDElementDialog.py:58 msgid "Edit Coil Values" msgstr "编辑线圈值" -#: ../dialogs/LDElementDialog.py:54 +#: ../dialogs/LDElementDialog.py:56 msgid "Edit Contact Values" msgstr "编辑接触点值" -#: ../dialogs/DurationEditorDialog.py:59 +#: ../dialogs/DurationEditorDialog.py:62 msgid "Edit Duration" msgstr "编辑期间" -#: ../dialogs/SFCStepDialog.py:51 +#: ../dialogs/SFCStepDialog.py:53 msgid "Edit Step" msgstr "编辑步骤" -#: ../wxglade_hmi/wxglade_hmi.py:38 +#: ../wxglade_hmi/wxglade_hmi.py:45 msgid "Edit a WxWidgets GUI with WXGlade" msgstr "用 WXGlade 编辑一个 WxWidgets 用户图形界面" -#: ../dialogs/ActionBlockDialog.py:121 +#: ../dialogs/ActionBlockDialog.py:127 msgid "Edit action block properties" msgstr "编辑行动块属性" -#: ../dialogs/ArrayTypeDialog.py:44 +#: ../dialogs/ArrayTypeDialog.py:47 msgid "Edit array type properties" msgstr "编辑数组类型属性" -#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055 +#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 msgid "Edit comment" msgstr "编辑注释" -#: ../editors/FileManagementPanel.py:66 +#: ../editors/FileManagementPanel.py:69 msgid "Edit file" msgstr "编辑文件" -#: ../controls/CustomEditableListBox.py:39 +#: ../controls/CustomEditableListBox.py:42 msgid "Edit item" msgstr "编辑项目" -#: ../editors/Viewer.py:3014 +#: ../editors/Viewer.py:3059 msgid "Edit jump target" msgstr "编辑跳跃目标" -#: ../ProjectController.py:1874 +#: ../ProjectController.py:1873 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "编辑原始的IEC代码添加至PLCGenerator生成的代码" -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:815 msgid "Edit step name" msgstr "编辑步骤名称" -#: ../dialogs/SFCTransitionDialog.py:52 +#: ../dialogs/SFCTransitionDialog.py:53 msgid "Edit transition" msgstr "编辑跃迁" -#: ../IDEFrame.py:611 +#: ../IDEFrame.py:632 msgid "Editor ToolBar" msgstr "编辑工具栏" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1294 msgid "Editor selection" msgstr "编辑选择" -#: ../editors/DataTypeEditor.py:348 +#: ../editors/DataTypeEditor.py:360 msgid "Elements :" msgstr "元素:" -#: ../ProjectController.py:1362 +#: ../ProjectController.py:1399 msgid "Empty" msgstr "空的" -#: ../IDEFrame.py:365 -msgid "Enable Undo/Redo" -msgstr "启用 取消/重做" - -#: ../Beremiz_service.py:333 +#: ../dialogs/ArrayTypeDialog.py:100 +msgid "Empty dimension isn't allowed." +msgstr "不允许空维度。" + +#: ../Beremiz_service.py:341 msgid "Enter a name " msgstr "输入一个名字" -#: ../Beremiz_service.py:318 +#: ../Beremiz_service.py:326 msgid "Enter a port number " msgstr "输入一个端口号" -#: ../Beremiz_service.py:309 +#: ../Beremiz_service.py:317 msgid "Enter the IP of the interface to bind" msgstr "输入界面的ip用以绑定" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "列举的" @@ -1538,48 +1524,47 @@ msgid "Equal to" msgstr "等于" -#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197 -#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60 -#: ../dialogs/DurationEditorDialog.py:121 -#: ../dialogs/DurationEditorDialog.py:167 -#: ../dialogs/PouTransitionDialog.py:107 ../dialogs/BlockPreviewDialog.py:237 -#: ../dialogs/ProjectDialog.py:74 ../dialogs/ArrayTypeDialog.py:97 -#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/BrowseLocationsDialog.py:218 -#: ../dialogs/BrowseValuesLibraryDialog.py:83 -#: ../dialogs/PouActionDialog.py:105 ../dialogs/PouDialog.py:135 -#: ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350 ../PLCOpenEditor.py:430 -#: ../PLCOpenEditor.py:440 ../editors/ResourceEditor.py:436 -#: ../editors/Viewer.py:424 ../editors/LDViewer.py:666 -#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886 -#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555 -#: ../editors/DataTypeEditor.py:574 ../editors/DataTypeEditor.py:743 -#: ../editors/DataTypeEditor.py:750 ../editors/TextViewer.py:389 -#: ../editors/CodeFileEditor.py:762 ../ProjectController.py:372 -#: ../ProjectController.py:512 ../ProjectController.py:519 -#: ../controls/FolderTree.py:217 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231 -#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759 -#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658 -#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682 -#: ../Beremiz_service.py:213 +#: ../dialogs/ForceVariableDialog.py:213 +#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 +#: ../dialogs/DurationEditorDialog.py:124 +#: ../dialogs/DurationEditorDialog.py:170 +#: ../dialogs/PouTransitionDialog.py:114 ../dialogs/BlockPreviewDialog.py:237 +#: ../dialogs/ProjectDialog.py:80 ../dialogs/ArrayTypeDialog.py:114 +#: ../dialogs/PouNameDialog.py:58 ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 +#: ../dialogs/PouActionDialog.py:112 ../dialogs/PouDialog.py:143 +#: ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 +#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 +#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 +#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 +#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 +#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 +#: ../ProjectController.py:391 ../ProjectController.py:531 +#: ../ProjectController.py:538 ../controls/FolderTree.py:222 +#: ../controls/ProjectPropertiesPanel.py:306 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 +#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 msgid "Error" msgstr "错误" -#: ../ProjectController.py:789 +#: ../ProjectController.py:811 msgid "" "Error : At least one configuration and one resource must be declared in PLC " "!\n" msgstr "错误:在PLC中,必须申明至少一个配置和一个资源!\n" -#: ../ProjectController.py:781 +#: ../ProjectController.py:803 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "错误:IEC到C编译器返回 %d\n" -#: ../ProjectController.py:712 +#: ../ProjectController.py:731 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1588,37 +1573,44 @@ "错误在ST/IL/SFC代码生成器中:\n" "%s\n" -#: ../ConfigTreeNode.py:216 +#: ../ConfigTreeNode.py:219 #, python-format msgid "Error while saving \"%s\"\n" msgstr "存储时有错误 \"%s\"\n" -#: ../canfestival/canfestival.py:170 +#: ../canfestival/canfestival.py:179 msgid "Error: Export slave failed\n" msgstr "错误:导出从站失败\n" -#: ../canfestival/canfestival.py:371 +#: ../modbus/modbus.py:601 +#, python-brace-format +msgid "" +"Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number " +"{a3}.\n" +msgstr "错误: Modbus/IP 服务器 %{a1}.x 和 %{a2}.x 使用相同的端口号 {a3}.\n" + +#: ../canfestival/canfestival.py:388 msgid "Error: No Master generated\n" msgstr "错误:没有主控生成\n" -#: ../canfestival/canfestival.py:366 +#: ../canfestival/canfestival.py:383 msgid "Error: No PLC built\n" msgstr "错误:没有PLC构建\n" -#: ../ProjectController.py:1728 +#: ../ProjectController.py:1708 #, python-format msgid "Exception while connecting %s!\n" msgstr "连接时存在异常 %s!\n" -#: ../dialogs/FBDBlockDialog.py:120 +#: ../dialogs/FBDBlockDialog.py:123 msgid "Execution Control:" msgstr "执行控制:" -#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108 +#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "执行命令:" -#: ../features.py:35 +#: ../features.py:36 msgid "Experimental web based HMI" msgstr "实验性的WEB基础的HMI" @@ -1630,77 +1622,77 @@ msgid "Exponentiation" msgstr "幂" -#: ../canfestival/canfestival.py:176 +#: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "导出 CANOpen 从站到 EDS 文件" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 msgid "Export graph values to clipboard" msgstr "导出图形值到剪切板" -#: ../canfestival/canfestival.py:175 +#: ../canfestival/canfestival.py:185 msgid "Export slave" msgstr "导出从站" -#: ../dialogs/FBDVariableDialog.py:90 +#: ../dialogs/FBDVariableDialog.py:94 msgid "Expression:" msgstr "表达式:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "External" msgstr "外部的" -#: ../ProjectController.py:802 +#: ../ProjectController.py:826 msgid "Extracting Located Variables...\n" msgstr "正在提取位置变量......\n" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "FBD" msgstr "功能块图" -#: ../ProjectController.py:1791 +#: ../ProjectController.py:1773 msgid "Failed : Must build before transfer.\n" msgstr "失败:传输之前必须构建。\n" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 msgid "Falling Edge" msgstr "下降沿" -#: ../ProjectController.py:1070 +#: ../ProjectController.py:1098 msgid "Fatal : cannot get builder.\n" msgstr "致命错误:无法获取构建者。\n" -#: ../Beremiz.py:156 +#: ../Beremiz.py:160 #, python-format msgid "Fetching %s" msgstr "抓取 %s" -#: ../dialogs/DurationEditorDialog.py:164 +#: ../dialogs/DurationEditorDialog.py:167 #, python-format msgid "Field %s hasn't a valid value!" msgstr "领域 %s 没有一个有效值!" -#: ../dialogs/DurationEditorDialog.py:166 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Fields %s haven't a valid value!" msgstr "领域 %s 没有一个有效值!" -#: ../controls/FolderTree.py:216 +#: ../controls/FolderTree.py:221 #, python-format msgid "File '%s' already exists!" msgstr "文件 '%s' 已经存在!" -#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37 -#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375 +#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 msgid "Find" msgstr "查找" -#: ../IDEFrame.py:377 +#: ../IDEFrame.py:379 msgid "Find Next" msgstr "查找下一个" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:381 msgid "Find Previous" msgstr "查找前一个" @@ -1708,93 +1700,89 @@ msgid "Find position" msgstr "查找位置" -#: ../dialogs/FindInPouDialog.py:55 +#: ../dialogs/FindInPouDialog.py:58 msgid "Find:" msgstr "查找:" -#: ../connectors/PYRO/__init__.py:163 -msgid "Force runtime reload\n" -msgstr "强制运行时重新加载\n" - -#: ../editors/Viewer.py:1600 +#: ../editors/Viewer.py:1633 msgid "Force value" msgstr "强制值" -#: ../dialogs/ForceVariableDialog.py:162 +#: ../dialogs/ForceVariableDialog.py:176 msgid "Forcing Variable Value" msgstr "强制变量值" -#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97 -#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95 -#: ../dialogs/PouDialog.py:117 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 +#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:125 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "形式不完整。%s 必须被填补完整!" -#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236 -#: ../dialogs/ConnectionDialog.py:163 +#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239 +#: ../dialogs/ConnectionDialog.py:166 msgid "Form isn't complete. Name must be filled!" msgstr "形式不完整。%s 名字必须填!" -#: ../dialogs/FBDBlockDialog.py:232 +#: ../dialogs/FBDBlockDialog.py:235 msgid "Form isn't complete. Valid block type must be selected!" msgstr "形式不完整。%s 有效的块类型必须被选择!" -#: ../dialogs/FindInPouDialog.py:72 +#: ../dialogs/FindInPouDialog.py:75 msgid "Forward" msgstr "向前的" -#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749 +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 msgid "Function" msgstr "功能" -#: ../IDEFrame.py:349 +#: ../IDEFrame.py:354 msgid "Function &Block" msgstr "功能 &块" -#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748 -#: ../IDEFrame.py:1941 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 +#: ../IDEFrame.py:1972 msgid "Function Block" msgstr "功能块" -#: ../controls/VariablePanel.py:854 +#: ../controls/VariablePanel.py:868 msgid "Function Block Types" msgstr "功能块类型" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Function Blocks" msgstr "功能块" -#: ../editors/Viewer.py:249 +#: ../editors/Viewer.py:290 msgid "Function Blocks can't be used in Functions!" msgstr "功能块不能用于功能中!" -#: ../PLCControler.py:2343 +#: ../PLCControler.py:1907 #, python-format msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!" msgstr "功能块 \"%s\" 不能用于功能中!" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "Functions" msgstr "功能" -#: ../PLCOpenEditor.py:117 +#: ../PLCOpenEditor.py:88 msgid "Generate Program" msgstr "生成程序" -#: ../ProjectController.py:703 +#: ../ProjectController.py:722 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "生成软PLC IEC-61131 ST/IL/SFC 代码......\n" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Global" msgstr "全球的" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 msgid "Go to current value" msgstr "定位当前值" -#: ../controls/ProjectPropertiesPanel.py:174 +#: ../controls/ProjectPropertiesPanel.py:189 msgid "Graphics" msgstr "图形" @@ -1806,110 +1794,114 @@ msgid "Greater than or equal to" msgstr "大于或等于" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:149 msgid "Grid Resolution:" msgstr "栅格分辨率:" -#: ../runtime/NevowServer.py:182 +#: ../runtime/NevowServer.py:192 msgid "HTTP interface port :" msgstr "HTTP 界面端口:" -#: ../controls/ProjectPropertiesPanel.py:121 +#: ../controls/ProjectPropertiesPanel.py:135 msgid "Height:" msgstr "高度:" -#: ../editors/FileManagementPanel.py:85 +#: ../editors/FileManagementPanel.py:89 msgid "Home Directory:" msgstr "主目录" -#: ../controls/ProjectPropertiesPanel.py:151 +#: ../controls/ProjectPropertiesPanel.py:165 msgid "Horizontal:" msgstr "水平:" -#: ../dialogs/DurationEditorDialog.py:45 +#: ../dialogs/DurationEditorDialog.py:47 msgid "Hours:" msgstr "小时:" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "IL" msgstr "指令表编程语言" -#: ../dialogs/DiscoveryDialog.py:94 +#: ../dialogs/DiscoveryDialog.py:91 msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:310 ../Beremiz_service.py:311 +#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 msgid "IP is not valid!" msgstr "IP 无效!" -#: ../svgui/svgui.py:44 ../svgui/svgui.py:45 +#: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "导入 SVG" -#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629 -#: ../controls/VariablePanel.py:71 +#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 +#: ../controls/VariablePanel.py:89 msgid "InOut" msgstr "输入输出" -#: ../editors/Viewer.py:431 +#: ../PLCGenerator.py:1040 +#, python-brace-format +msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." +msgstr "InOut 变量 {a1} 在块 {a2} 在 POU{a3} 必须被连接." + +#: ../editors/Viewer.py:473 msgid "Inactive" msgstr "不活动" -#: ../controls/VariablePanel.py:276 +#: ../controls/VariablePanel.py:300 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr " \"{a1}\" 和 \"{a2}\" 数据类型不相容" -#: ../controls/VariablePanel.py:282 +#: ../controls/VariablePanel.py:306 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr " \"%s\" 和 \"BOOL\" 数据尺寸不相容" -#: ../controls/VariablePanel.py:286 +#: ../controls/VariablePanel.py:310 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr " \"{a1}\" 和 \"{a2}\" 数据尺寸不相容" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "指示器" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:734 msgid "Initial" msgstr "初始的" -#: ../editors/Viewer.py:611 +#: ../editors/Viewer.py:650 msgid "Initial Step" msgstr "初始的步" -#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53 -#: ../controls/VariablePanel.py:54 +#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63 msgid "Initial Value" msgstr "初始值" -#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216 -#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310 +#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224 +#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320 msgid "Initial Value:" msgstr "初始值:" -#: ../svgui/svgui.py:48 +#: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" -#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43 +#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47 msgid "Inline" msgstr "在线" -#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38 -#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Input" msgstr "输入" -#: ../dialogs/FBDBlockDialog.py:96 +#: ../dialogs/FBDBlockDialog.py:99 msgid "Inputs:" msgstr "输入:" @@ -1917,64 +1909,72 @@ msgid "Insertion (into)" msgstr "插入" -#: ../plcopen/plcopen.py:1696 +#: ../plcopen/plcopen.py:1948 #, python-format msgid "Instance with id %d doesn't exist!" msgstr "有id的实例 %d 尚不存在!" -#: ../editors/ResourceEditor.py:264 +#: ../editors/ResourceEditor.py:279 msgid "Instances:" msgstr "实例:" -#: ../controls/VariablePanel.py:70 +#: ../controls/VariablePanel.py:88 msgid "Interface" msgstr "界面" -#: ../editors/ResourceEditor.py:72 +#: ../editors/ResourceEditor.py:81 msgid "Interrupt" msgstr "中断" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Interval" msgstr "区间" -#: ../PLCControler.py:2331 +#: ../controls/ProjectPropertiesPanel.py:304 +msgid "" +"Invalid URL!\n" +"Please enter correct URL address." +msgstr "" +"无效的URL!\n" +"请输入正确的URL地址." + +#: ../PLCControler.py:1895 msgid "Invalid plcopen element(s)!!!" msgstr "无效的plcopen元素!!!" -#: ../canfestival/config_utils.py:381 +#: ../canfestival/config_utils.py:407 #, python-brace-format -msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\"" -msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{a4}\"" - -#: ../canfestival/config_utils.py:645 +msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" +msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{a4}\"" + +#: ../canfestival/config_utils.py:689 #, python-brace-format msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132 -#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92 -#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 +#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "无效值 \"%s\" 为调试变量" -#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258 +#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "无效值 \"%s\" 对于变量网格元素" -#: ../editors/Viewer.py:234 ../editors/Viewer.py:237 +#: ../editors/Viewer.py:276 ../editors/Viewer.py:279 #, python-format msgid "Invalid value \"%s\" for viewer block" msgstr "无效值 \"%s\" 在视窗块" -#: ../dialogs/ForceVariableDialog.py:195 +#: ../dialogs/ForceVariableDialog.py:211 #, python-brace-format msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "无效值 \"{a1}\" 对于 \"{a2}\" 变量!" -#: ../dialogs/DurationEditorDialog.py:121 +#: ../dialogs/DurationEditorDialog.py:124 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1982,51 +1982,55 @@ "无效值!\n" "你必须填入一个数字值。" -#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392 +#: ../connectors/WAMP/dialog.py:38 +msgid "Is connection secure?" +msgstr "是安全连接吗?" + +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 msgid "Jump" msgstr "跳转" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "LD" msgstr "梯级图" -#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231 +#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240 #, python-format msgid "Ladder element with id %d is on more than one rung." msgstr "有id的梯形元素 %d 不止在一个梯级上。" -#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84 -#: ../dialogs/PouDialog.py:105 +#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:113 msgid "Language" msgstr "语言" -#: ../controls/ProjectPropertiesPanel.py:187 +#: ../controls/ProjectPropertiesPanel.py:206 msgid "Language (optional):" msgstr "语言(选填):" -#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56 -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:81 msgid "Language:" msgstr "语言:" -#: ../ProjectController.py:1797 +#: ../ProjectController.py:1779 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "最新构建已经与当前目标匹配。正在传输中......\n" -#: ../Beremiz_service.py:273 +#: ../Beremiz_service.py:281 msgid "Launch WX GUI inspector" msgstr "启动 WX GUI 检查员" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:280 msgid "Launch a live Python shell" msgstr "启动一个活的Python Shell" -#: ../editors/Viewer.py:544 +#: ../editors/Viewer.py:580 msgid "Left" msgstr "左" -#: ../dialogs/LDPowerRailDialog.py:63 +#: ../dialogs/LDPowerRailDialog.py:64 msgid "Left PowerRail" msgstr "左电源导轨" @@ -2042,11 +2046,11 @@ msgid "Less than or equal to" msgstr "小于或等于" -#: ../IDEFrame.py:631 +#: ../IDEFrame.py:652 msgid "Library" msgstr "库" -#: ../dialogs/AboutDialog.py:151 +#: ../dialogs/AboutDialog.py:145 msgid "License" msgstr "许可" @@ -2054,27 +2058,27 @@ msgid "Limitation" msgstr "限制" -#: ../targets/toolchain_gcc.py:202 +#: ../targets/toolchain_gcc.py:209 msgid "Linking :\n" msgstr "链接:\n" -#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 msgid "Local" msgstr "本地" -#: ../canfestival/canfestival.py:348 +#: ../canfestival/canfestival.py:359 msgid "Local entries" msgstr "本地入口" -#: ../ProjectController.py:1703 +#: ../ProjectController.py:1685 msgid "Local service discovery failed!\n" msgstr "本地服务探索失败!\n" -#: ../controls/VariablePanel.py:53 +#: ../controls/VariablePanel.py:62 msgid "Location" msgstr "位置" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:79 msgid "Locations available:" msgstr "存在的定位:" @@ -2082,12 +2086,12 @@ msgid "Logarithm to base 10" msgstr "底数10的对数" -#: ../connectors/PYRO/__init__.py:94 +#: ../connectors/PYRO/__init__.py:102 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "MDNS 解析度失败因为 '%s'\n" -#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85 +#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "映射变量" @@ -2095,11 +2099,15 @@ msgid "Map located variables over CANopen" msgstr "通过CANopen映射位置变量" -#: ../canfestival/NetworkEditor.py:106 +#: ../features.py:32 +msgid "Map located variables over Modbus" +msgstr "通过Modbus定位变量" + +#: ../canfestival/NetworkEditor.py:113 msgid "Master" msgstr "主站" -#: ../ConfigTreeNode.py:539 +#: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "最大计数 ({a1}) 达到了对于类型 {a2} 这个confnode" @@ -2108,29 +2116,29 @@ msgid "Maximum" msgstr "最大值" -#: ../editors/DataTypeEditor.py:239 +#: ../editors/DataTypeEditor.py:246 msgid "Maximum:" msgstr "最大值:" -#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290 -#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 +#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Memory" msgstr "存储" -#: ../IDEFrame.py:599 +#: ../IDEFrame.py:617 msgid "Menu ToolBar" msgstr "菜单工具栏" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:51 msgid "Microseconds:" msgstr "微秒:" -#: ../editors/Viewer.py:549 +#: ../editors/Viewer.py:585 msgid "Middle" msgstr "中间" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:50 msgid "Milliseconds:" msgstr "毫秒:" @@ -2138,78 +2146,82 @@ msgid "Minimum" msgstr "最小值" -#: ../editors/DataTypeEditor.py:226 +#: ../editors/DataTypeEditor.py:233 msgid "Minimum:" msgstr "最小值:" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:48 msgid "Minutes:" msgstr "分:" -#: ../controls/ProjectPropertiesPanel.py:211 +#: ../controls/ProjectPropertiesPanel.py:231 msgid "Miscellaneous" msgstr "其他" -#: ../dialogs/LDElementDialog.py:63 +#: ../features.py:32 +msgid "Modbus support" +msgstr "Modbus 支持" + +#: ../dialogs/LDElementDialog.py:65 msgid "Modifier:" msgstr "改动:" -#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230 +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 #, python-brace-format msgid "" "More than one connector found corresponding to \"{a1}\" continuation in " "\"{a2}\" POU" msgstr "多个连接器发现对应在 \"{a2}\" POU中 \"{a1}\" 延续" -#: ../dialogs/ActionBlockDialog.py:140 +#: ../dialogs/ActionBlockDialog.py:146 msgid "Move action down" msgstr "下移动作" -#: ../dialogs/ActionBlockDialog.py:139 +#: ../dialogs/ActionBlockDialog.py:145 msgid "Move action up" msgstr "上移动作" -#: ../controls/CustomEditableListBox.py:43 +#: ../controls/CustomEditableListBox.py:46 msgid "Move down" msgstr "下移" -#: ../editors/DataTypeEditor.py:355 +#: ../editors/DataTypeEditor.py:367 msgid "Move element down" msgstr "下移元素" -#: ../editors/DataTypeEditor.py:354 +#: ../editors/DataTypeEditor.py:366 msgid "Move element up" msgstr "上移元素" -#: ../editors/ResourceEditor.py:271 +#: ../editors/ResourceEditor.py:286 msgid "Move instance down" msgstr "下移实例" -#: ../editors/ResourceEditor.py:270 +#: ../editors/ResourceEditor.py:285 msgid "Move instance up" msgstr "上移实例" -#: ../editors/ResourceEditor.py:242 +#: ../editors/ResourceEditor.py:255 msgid "Move task down" msgstr "下移任务" -#: ../editors/ResourceEditor.py:241 +#: ../editors/ResourceEditor.py:254 msgid "Move task up" msgstr "上移任务" -#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185 +#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 msgid "Move the view" msgstr "移动视图" -#: ../controls/CustomEditableListBox.py:42 +#: ../controls/CustomEditableListBox.py:45 msgid "Move up" msgstr "上移" -#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453 +#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 msgid "Move variable down" msgstr "下移变量" -#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452 +#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 msgid "Move variable up" msgstr "上移变量" @@ -2221,26 +2233,26 @@ msgid "Multiplication" msgstr "乘法" -#: ../editors/FileManagementPanel.py:83 +#: ../editors/FileManagementPanel.py:87 msgid "My Computer:" msgstr "我的计算机:" -#: ../dialogs/DiscoveryDialog.py:92 +#: ../dialogs/DiscoveryDialog.py:89 msgid "NAME" msgstr "NAME" -#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../controls/VariablePanel.py:59 msgid "Name" msgstr "名字" -#: ../Beremiz_service.py:334 +#: ../Beremiz_service.py:342 msgid "Name must not be null!" msgstr "名称不能为空!" -#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86 -#: ../dialogs/ConnectionDialog.py:76 +#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89 +#: ../dialogs/ConnectionDialog.py:78 msgid "Name:" msgstr "名字:" @@ -2248,46 +2260,46 @@ msgid "Natural logarithm" msgstr "自然对数" -#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 msgid "Negated" msgstr "否定" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:610 msgid "Nevow Web service failed. " msgstr "Nevow Web 服务失败。 " -#: ../Beremiz_service.py:556 +#: ../Beremiz_service.py:580 msgid "Nevow/Athena import failed :" msgstr "Nevow/Athena 导入失败:" -#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104 -#: ../PLCOpenEditor.py:146 +#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75 +#: ../PLCOpenEditor.py:117 msgid "New" msgstr "新建" -#: ../controls/CustomEditableListBox.py:40 +#: ../controls/CustomEditableListBox.py:43 msgid "New item" msgstr "新建项目" -#: ../editors/Viewer.py:518 +#: ../editors/Viewer.py:553 msgid "No Modifier" msgstr "无改动" -#: ../ProjectController.py:1826 +#: ../ProjectController.py:1808 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "没有PLC可传输(构建是否成功?)\n" -#: ../PLCGenerator.py:1631 +#: ../PLCGenerator.py:1678 #, python-format msgid "No body defined in \"%s\" POU" msgstr "在 \"%s\" POU 中没有任何东西被定义" -#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241 +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "没有连接器发现对应在 \"{a2}\" POU中 \"{a1}\" 延续" -#: ../PLCOpenEditor.py:357 +#: ../PLCOpenEditor.py:331 msgid "" "No documentation available.\n" "Coming soon." @@ -2295,60 +2307,60 @@ "没有文件可用。\n" "稍候" -#: ../PLCGenerator.py:829 +#: ../PLCGenerator.py:841 #, python-format msgid "No informations found for \"%s\" block" msgstr "对于 \"%s\" 块没有信息发现" -#: ../PLCGenerator.py:1194 +#: ../PLCGenerator.py:1232 #, python-brace-format msgid "" "No output {a1} variable found in block {a2} in POU {a3}. Connection must be " "broken" msgstr "无输出{a1}变量发现在 {a3} POU的 {a2} 块。 连接必须断开" -#: ../controls/SearchResultPanel.py:169 +#: ../controls/SearchResultPanel.py:175 msgid "No search results available." msgstr "没有存在的搜索结果。" -#: ../svgui/svgui.py:134 +#: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "没有这样的SVG文件:%s\n" -#: ../canfestival/config_utils.py:639 +#: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" msgstr "没有如此 标签/子标签 ({a1},{a2}) (变量 {a3})" -#: ../canfestival/config_utils.py:362 +#: ../canfestival/config_utils.py:387 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "没有如此 标签/子标签 ({a1},{a2}) 在ID : {a3} (变量 {a4})" -#: ../dialogs/BrowseValuesLibraryDialog.py:83 +#: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "没有有效的值被选择!" -#: ../PLCGenerator.py:1629 +#: ../PLCGenerator.py:1676 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "无变量被定义在 \"%s\" POU" -#: ../canfestival/config_utils.py:355 +#: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" msgstr "不存在节点 ID :{a1} (variable {a2})" -#: ../controls/VariablePanel.py:64 +#: ../controls/VariablePanel.py:79 msgid "Non-Retain" msgstr "非保持" -#: ../dialogs/LDElementDialog.py:75 +#: ../dialogs/LDElementDialog.py:78 msgid "Normal" msgstr "正常" -#: ../canfestival/config_utils.py:389 +#: ../canfestival/config_utils.py:426 #, python-brace-format msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "不是PDO可映射变量:'{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))" @@ -2357,7 +2369,7 @@ msgid "Not equal to" msgstr "不等于" -#: ../dialogs/SFCDivergenceDialog.py:89 +#: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "序列号:" @@ -2365,90 +2377,90 @@ msgid "Numerical" msgstr "数学式" -#: ../editors/CodeFileEditor.py:739 +#: ../editors/CodeFileEditor.py:736 msgid "OnChange" msgstr "在改变中" -#: ../dialogs/SearchInProjectDialog.py:84 +#: ../dialogs/SearchInProjectDialog.py:88 msgid "Only Elements" msgstr "唯一元素" -#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106 -#: ../PLCOpenEditor.py:147 +#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77 +#: ../PLCOpenEditor.py:118 msgid "Open" msgstr "打开" -#: ../svgui/svgui.py:143 +#: ../svgui/svgui.py:151 msgid "Open Inkscape" msgstr "打开 Inkscape" -#: ../version.py:77 +#: ../version.py:86 msgid "" "Open Source framework for automation, implemented IEC 61131 IDE with " "constantly growing set of extensions and flexible PLC runtime." msgstr "开源自动化框架,实现不断增长的扩展集和弹性的PLC运行时的IEC 61131-3 IDE" -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1879 msgid "Open a file explorer to manage project files" msgstr "打开一个文件浏览器来管理项目文件" -#: ../wxglade_hmi/wxglade_hmi.py:155 +#: ../wxglade_hmi/wxglade_hmi.py:161 msgid "Open wxGlade" msgstr "打开 wxGlade" -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../controls/VariablePanel.py:64 msgid "Option" msgstr "选项" -#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 msgid "Options" msgstr "选项" -#: ../controls/ProjectPropertiesPanel.py:98 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Organization (optional):" msgstr "组织(选填):" -#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95 +#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102 msgid "Other Profile" msgstr "其他配置" -#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40 -#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290 -#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71 -#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 +#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 msgid "Output" msgstr "输出" -#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84 +#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO 接收" -#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83 +#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90 msgid "PDO Transmit" msgstr "PDO 传输" -#: ../targets/toolchain_gcc.py:167 +#: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "PLC:\n" -#: ../BeremizIDE.py:355 +#: ../BeremizIDE.py:383 msgid "PLC Log" msgstr "PLC 记录" -#: ../ProjectController.py:1054 +#: ../ProjectController.py:1082 msgid "PLC code generation failed !\n" msgstr "PLC 代码生成失败!\n" -#: ../Beremiz_service.py:297 +#: ../Beremiz_service.py:305 msgid "PLC is empty or already started." msgstr "PLC 是空的或者已经被启动。" -#: ../Beremiz_service.py:304 +#: ../Beremiz_service.py:312 msgid "PLC is not started." msgstr "PLC 没有被启动。" -#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319 +#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" "PLC syntax error at line {a1}:\n" @@ -2457,15 +2469,15 @@ "PLC语法错误在行 {a1}:\n" "{a2}" -#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*" msgstr "PLCOpen 文件 (*.xml)|*.xml|所有文件|*.*" -#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219 +#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193 msgid "PLCOpenEditor" msgstr "PLCOpen编辑器" -#: ../PLCOpenEditor.py:365 +#: ../PLCOpenEditor.py:339 msgid "" "PLCOpenEditor is part of Beremiz project.\n" "\n" @@ -2475,205 +2487,205 @@ "\n" "Beremiz是一个" -#: ../dialogs/DiscoveryDialog.py:95 +#: ../dialogs/DiscoveryDialog.py:92 msgid "PORT" msgstr "端口" -#: ../dialogs/PouDialog.py:101 +#: ../dialogs/PouDialog.py:109 msgid "POU Name" msgstr "POU 名字" -#: ../dialogs/PouDialog.py:58 +#: ../dialogs/PouDialog.py:66 msgid "POU Name:" msgstr "POU 名字:" -#: ../dialogs/PouDialog.py:103 +#: ../dialogs/PouDialog.py:111 msgid "POU Type" msgstr "POU类型" -#: ../dialogs/PouDialog.py:65 +#: ../dialogs/PouDialog.py:73 msgid "POU Type:" msgstr "POU 类型:" -#: ../connectors/PYRO/__init__.py:45 +#: ../connectors/PYRO/__init__.py:52 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "PYRO 连接到 URI : %s\n" -#: ../connectors/PYRO/__init__.py:61 +#: ../connectors/PYRO/__init__.py:68 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO使用认证在 '%s' \n" -#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120 +#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91 msgid "Page Setup" msgstr "页面设置" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:124 msgid "Page Size (optional):" msgstr "页面大小(选填):" -#: ../IDEFrame.py:2613 +#: ../IDEFrame.py:2640 #, python-format msgid "Page: %d" msgstr "页:%d" -#: ../controls/PouInstanceVariablesPanel.py:124 +#: ../controls/PouInstanceVariablesPanel.py:134 msgid "Parent instance" msgstr "父实例" -#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426 +#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 msgid "Paste" msgstr "粘贴" -#: ../IDEFrame.py:1868 +#: ../IDEFrame.py:1899 msgid "Paste POU" msgstr "粘贴POU" -#: ../dialogs/SearchInProjectDialog.py:56 +#: ../dialogs/SearchInProjectDialog.py:60 msgid "Pattern to search:" msgstr "检索模式:" -#: ../dialogs/LDPowerRailDialog.py:74 +#: ../dialogs/LDPowerRailDialog.py:75 msgid "Pin number:" msgstr "插脚数:" -#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014 -#: ../editors/SFCViewer.py:770 +#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "请选择一个目标" -#: ../editors/TextViewer.py:262 +#: ../editors/TextViewer.py:260 msgid "Please enter a block name" msgstr "请输入一个块名称" -#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056 +#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 msgid "Please enter comment text" msgstr "请输入注释文本" -#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455 -#: ../editors/SFCViewer.py:799 +#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469 +#: ../editors/SFCViewer.py:815 msgid "Please enter step name" msgstr "请输入步骤名称" -#: ../Beremiz_service.py:196 +#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 msgid "Please enter text" msgstr "请输入文本" -#: ../dialogs/ForceVariableDialog.py:163 +#: ../dialogs/ForceVariableDialog.py:177 #, python-format msgid "Please enter value for a \"%s\" variable:" msgstr "请输入值对于一个 \"%s\" 变量:" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be 0 <= port <= 65535!" msgstr "端口号必须为 0 <= 端口号 <= 65535!" -#: ../Beremiz_service.py:319 +#: ../Beremiz_service.py:327 msgid "Port number must be an integer!" msgstr "端口号必须是整数!" -#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416 +#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 msgid "Power Rail" msgstr "电源导轨" -#: ../dialogs/LDPowerRailDialog.py:51 +#: ../dialogs/LDPowerRailDialog.py:52 msgid "Power Rail Properties" msgstr "电源导轨属性" -#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122 +#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93 msgid "Preview" msgstr "打印预览" -#: ../dialogs/BlockPreviewDialog.py:57 +#: ../dialogs/BlockPreviewDialog.py:59 msgid "Preview:" msgstr "预览:" -#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124 -#: ../PLCOpenEditor.py:150 +#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95 +#: ../PLCOpenEditor.py:121 msgid "Print" msgstr "打印" -#: ../IDEFrame.py:1079 +#: ../IDEFrame.py:1110 msgid "Print preview" msgstr "打印预览" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Priority" msgstr "优先" -#: ../dialogs/SFCTransitionDialog.py:90 +#: ../dialogs/SFCTransitionDialog.py:91 msgid "Priority:" msgstr "优先:" -#: ../runtime/PLCObject.py:369 +#: ../runtime/PLCObject.py:518 #, python-format msgid "Problem starting PLC : error %d" msgstr "故障启动PLC:错误 %d" -#: ../dialogs/ProjectDialog.py:58 +#: ../dialogs/ProjectDialog.py:63 msgid "Product Name" msgstr "产品名称" -#: ../controls/ProjectPropertiesPanel.py:81 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Product Name (required):" msgstr "产品名字(必填):" -#: ../controls/ProjectPropertiesPanel.py:83 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Release (optional):" msgstr "产品发布(选填):" -#: ../dialogs/ProjectDialog.py:59 +#: ../dialogs/ProjectDialog.py:64 msgid "Product Version" msgstr "产品版本" -#: ../controls/ProjectPropertiesPanel.py:82 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "产品版本(必填):" -#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747 -#: ../IDEFrame.py:1944 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 +#: ../IDEFrame.py:1975 msgid "Program" msgstr "程序" -#: ../PLCOpenEditor.py:347 +#: ../PLCOpenEditor.py:321 msgid "Program was successfully generated!" msgstr "该编程成功生成文件!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Programs" msgstr "程序" -#: ../editors/Viewer.py:243 +#: ../editors/Viewer.py:285 msgid "Programs can't be used by other POUs!" msgstr "程序不能被其它POU使用!" -#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584 +#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 msgid "Project" msgstr "项目" -#: ../controls/SearchResultPanel.py:173 +#: ../controls/SearchResultPanel.py:180 #, python-format msgid "Project '%s':" msgstr "项目 '%s':" -#: ../ProjectController.py:1877 +#: ../ProjectController.py:1878 msgid "Project Files" msgstr "项目文件" -#: ../dialogs/ProjectDialog.py:57 +#: ../dialogs/ProjectDialog.py:62 msgid "Project Name" msgstr "项目名称" -#: ../controls/ProjectPropertiesPanel.py:79 +#: ../controls/ProjectPropertiesPanel.py:88 msgid "Project Name (required):" msgstr "项目名称(必填):" -#: ../controls/ProjectPropertiesPanel.py:80 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Version (optional):" msgstr "项目版本(选填):" -#: ../PLCControler.py:3164 +#: ../PLCControler.py:2717 msgid "" "Project file syntax error:\n" "\n" @@ -2681,90 +2693,90 @@ "项目文件语法错误:\n" "\n" -#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37 +#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40 msgid "Project properties" msgstr "项目属性" -#: ../ConfigTreeNode.py:566 +#: ../ConfigTreeNode.py:571 #, python-brace-format msgid "Project tree layout do not match confnode.xml {a1}!={a2} " msgstr "项目树的布局不匹配confnode.xml {a1}!={a2} " -#: ../dialogs/ConnectionDialog.py:98 +#: ../dialogs/ConnectionDialog.py:101 msgid "Propagate Name" msgstr "扩展名" -#: ../PLCControler.py:99 +#: ../plcopen/types_enums.py:77 msgid "Properties" msgstr "属性" -#: ../Beremiz_service.py:442 +#: ../Beremiz_service.py:427 msgid "Publishing service on local network" msgstr "在本地网络上发布服务" -#: ../connectors/PYRO/__init__.py:118 +#: ../connectors/PYRO/__init__.py:126 #, python-format msgid "Pyro exception: %s\n" msgstr "Pyro异常: %s\n" -#: ../Beremiz_service.py:429 -msgid "Pyro object's uri :" -msgstr "Pyro 目标的URL:" - -#: ../Beremiz_service.py:428 +#: ../Beremiz_service.py:420 msgid "Pyro port :" msgstr "Pyro端口:" -#: ../py_ext/PythonEditor.py:81 +#: ../py_ext/PythonEditor.py:84 msgid "Python code" msgstr "Python代码" -#: ../features.py:33 +#: ../features.py:34 msgid "Python file" msgstr "Python文件" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Qualifier" msgstr "合格验证" -#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 msgid "Quit" msgstr "退出" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 msgid "Range:" msgstr "范围:" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1872 msgid "Raw IEC code" msgstr "原始的IEC代码" -#: ../BeremizIDE.py:1047 +#: ../BeremizIDE.py:1083 #, python-format msgid "Really delete node '%s'?" msgstr "真的删除节点 '%s'吗?" -#: ../IDEFrame.py:362 ../IDEFrame.py:422 +#: ../connectors/WAMP/dialog.py:50 +msgid "Realm:" +msgstr "范围:" + +#: ../IDEFrame.py:367 ../IDEFrame.py:424 msgid "Redo" msgstr "重做" -#: ../dialogs/SFCTransitionDialog.py:75 +#: ../dialogs/SFCTransitionDialog.py:76 msgid "Reference" msgstr "参照" -#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 msgid "Refresh" msgstr "刷新" -#: ../dialogs/SearchInProjectDialog.py:66 +#: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "正则表达式" -#: ../dialogs/FindInPouDialog.py:96 +#: ../dialogs/FindInPouDialog.py:99 msgid "Regular expressions" msgstr "正则表达式" -#: ../editors/Viewer.py:1603 +#: ../editors/Viewer.py:1636 msgid "Release value" msgstr "释放值" @@ -2772,56 +2784,56 @@ msgid "Remainder (modulo)" msgstr "余数(模)" -#: ../BeremizIDE.py:1048 +#: ../BeremizIDE.py:1084 #, python-format msgid "Remove %s node" msgstr "移除 %s 节点" -#: ../IDEFrame.py:2419 +#: ../IDEFrame.py:2445 msgid "Remove Datatype" msgstr "移除数据类型" -#: ../IDEFrame.py:2424 +#: ../IDEFrame.py:2450 msgid "Remove Pou" msgstr "移除POU" -#: ../dialogs/ActionBlockDialog.py:138 +#: ../dialogs/ActionBlockDialog.py:144 msgid "Remove action" msgstr "移除动作" -#: ../editors/DataTypeEditor.py:353 +#: ../editors/DataTypeEditor.py:365 msgid "Remove element" msgstr "移除元素" -#: ../editors/FileManagementPanel.py:63 +#: ../editors/FileManagementPanel.py:66 msgid "Remove file from left folder" msgstr "从左侧目录移除文件" -#: ../editors/ResourceEditor.py:269 +#: ../editors/ResourceEditor.py:284 msgid "Remove instance" msgstr "移除实例" -#: ../canfestival/NetworkEditor.py:104 +#: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "移除从站" -#: ../editors/ResourceEditor.py:240 +#: ../editors/ResourceEditor.py:253 msgid "Remove task" msgstr "移除任务" -#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451 +#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 msgid "Remove variable" msgstr "移除变量" -#: ../IDEFrame.py:1948 +#: ../IDEFrame.py:1979 msgid "Rename" msgstr "重命名" -#: ../editors/FileManagementPanel.py:181 +#: ../editors/FileManagementPanel.py:187 msgid "Replace File" msgstr "替换文件" -#: ../editors/Viewer.py:561 +#: ../editors/Viewer.py:598 msgid "Replace Wire by connections" msgstr "通过连接替换Wire" @@ -2829,43 +2841,43 @@ msgid "Replacement (within)" msgstr "替换" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Reset" msgstr "重置" -#: ../editors/Viewer.py:642 +#: ../editors/Viewer.py:681 msgid "Reset Execution Order" msgstr "重置执行命令" -#: ../IDEFrame.py:451 +#: ../IDEFrame.py:453 msgid "Reset Perspective" msgstr "复位透视图" -#: ../controls/SearchResultPanel.py:105 +#: ../controls/SearchResultPanel.py:103 msgid "Reset search result" msgstr "复位搜索结果" -#: ../BeremizIDE.py:979 ../PLCControler.py:99 +#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "资源" -#: ../controls/VariablePanel.py:62 +#: ../controls/VariablePanel.py:77 msgid "Retain" msgstr "保持" -#: ../controls/VariablePanel.py:424 +#: ../controls/VariablePanel.py:455 msgid "Return Type:" msgstr "返回类型:" -#: ../editors/Viewer.py:546 +#: ../editors/Viewer.py:582 msgid "Right" msgstr "右" -#: ../dialogs/LDPowerRailDialog.py:64 +#: ../dialogs/LDPowerRailDialog.py:65 msgid "Right PowerRail" msgstr "右电源导轨" -#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 msgid "Rising Edge" msgstr "上升沿" @@ -2881,114 +2893,114 @@ msgid "Rounding up/down" msgstr "四舍五入" -#: ../ProjectController.py:1841 +#: ../ProjectController.py:1828 msgid "Run" msgstr "运行" -#: ../ProjectController.py:1099 +#: ../ProjectController.py:1127 msgid "Runtime IO extensions C code generation failed !\n" msgstr "运行时IO扩展C代码生成失败!\n" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1136 msgid "Runtime library extensions C code generation failed !\n" msgstr "运行时库扩展C代码生成失败!\n" -#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82 +#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89 msgid "SDO Client" msgstr "SDO客户端" -#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81 +#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88 msgid "SDO Server" msgstr "SDO服务器" -#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144 +#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 msgid "SFC" msgstr "顺序功能图" -#: ../PLCGenerator.py:1392 +#: ../PLCGenerator.py:1433 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "POU \"{a1}\" 中的SFC跳转 涉及不存在SFC步 \"{a2}\"" -#: ../PLCGenerator.py:773 +#: ../PLCGenerator.py:780 #, python-format msgid "SFC transition in POU \"%s\" must be connected." msgstr "在POU \"%s\" 中 SFC 移动必须被连接。" -#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32 -#: ../dialogs/PouDialog.py:37 +#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 +#: ../dialogs/PouDialog.py:44 msgid "ST" msgstr "结构化文本" -#: ../PLCOpenEditor.py:334 +#: ../PLCOpenEditor.py:308 msgid "ST files (*.st)|*.st|All files|*.*" msgstr "ST 文件 (*.st)|*.st|所有文件|*.*" -#: ../svgui/svgui.py:128 +#: ../svgui/svgui.py:136 msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG 文件 (*.svg)|*.svg|All files|*.*" -#: ../features.py:35 +#: ../features.py:36 msgid "SVGUI" msgstr "SVGUI" -#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113 -#: ../PLCOpenEditor.py:148 +#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84 +#: ../PLCOpenEditor.py:119 msgid "Save" msgstr "保存" -#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149 +#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120 msgid "Save As..." msgstr "另存为..." -#: ../BeremizIDE.py:224 +#: ../BeremizIDE.py:249 msgid "Save as" msgstr "另存为" -#: ../ProjectController.py:511 +#: ../ProjectController.py:530 msgid "Save path is the same as path of a project! \n" msgstr "保存路径和项目路径相同!\n" -#: ../dialogs/SearchInProjectDialog.py:69 +#: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "范围" -#: ../IDEFrame.py:623 +#: ../IDEFrame.py:644 msgid "Search" msgstr "搜索" -#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 -#: ../IDEFrame.py:428 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 +#: ../IDEFrame.py:430 msgid "Search in Project" msgstr "在项目中搜索" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:49 msgid "Seconds:" msgstr "秒:" -#: ../IDEFrame.py:388 +#: ../IDEFrame.py:390 msgid "Select All" msgstr "选择全部" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Select a variable class:" msgstr "选择一个变量种类:" -#: ../ProjectController.py:1257 +#: ../ProjectController.py:1293 msgid "Select an editor:" msgstr "选择一个编辑:" -#: ../controls/PouInstanceVariablesPanel.py:281 +#: ../controls/PouInstanceVariablesPanel.py:292 msgid "Select an instance" msgstr "选择一个实例" -#: ../IDEFrame.py:607 +#: ../IDEFrame.py:628 msgid "Select an object" msgstr "选择一个对象" -#: ../ProjectController.py:518 +#: ../ProjectController.py:537 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "选择的目录已经包含其他项目。覆盖?\n" @@ -2996,23 +3008,23 @@ msgid "Selection" msgstr "选择" -#: ../dialogs/SFCDivergenceDialog.py:65 +#: ../dialogs/SFCDivergenceDialog.py:66 msgid "Selection Convergence" msgstr "选择收敛" -#: ../dialogs/SFCDivergenceDialog.py:64 +#: ../dialogs/SFCDivergenceDialog.py:65 msgid "Selection Divergence" msgstr "选择发散" -#: ../dialogs/DiscoveryDialog.py:82 +#: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "服务探索" -#: ../dialogs/DiscoveryDialog.py:85 +#: ../dialogs/DiscoveryDialog.py:104 msgid "Services available:" msgstr "存在的服务:" -#: ../dialogs/LDElementDialog.py:76 +#: ../dialogs/LDElementDialog.py:79 msgid "Set" msgstr "设置" @@ -3024,27 +3036,27 @@ msgid "Shift right" msgstr "右移" -#: ../ProjectController.py:1867 +#: ../ProjectController.py:1863 msgid "Show IEC code generated by PLCGenerator" msgstr "显示由PLCGenerator生成的IEC代码" -#: ../canfestival/canfestival.py:389 +#: ../canfestival/canfestival.py:407 msgid "Show Master" msgstr "显示主控" -#: ../canfestival/canfestival.py:390 +#: ../canfestival/canfestival.py:408 msgid "Show Master generated by config_utils" msgstr "显示由config_utils生成的主控" -#: ../ProjectController.py:1865 +#: ../ProjectController.py:1862 msgid "Show code" msgstr "显示代码" -#: ../dialogs/SFCDivergenceDialog.py:67 +#: ../dialogs/SFCDivergenceDialog.py:68 msgid "Simultaneous Convergence" msgstr "同步收敛" -#: ../dialogs/SFCDivergenceDialog.py:66 +#: ../dialogs/SFCDivergenceDialog.py:67 msgid "Simultaneous Divergence" msgstr "同步发散" @@ -3052,15 +3064,15 @@ msgid "Sine" msgstr "正弦" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Single" msgstr "单" -#: ../targets/toolchain_makefile.py:126 +#: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "源代码没有变化,不需要构建.\n" -#: ../PLCGenerator.py:397 +#: ../PLCGenerator.py:404 #, python-brace-format msgid "" "Source signal has to be defined for single task '{a1}' in resource " @@ -3071,60 +3083,56 @@ msgid "Square root (base 2)" msgstr "平方根(底数2)" -#: ../plcopen/definitions.py:48 +#: ../plcopen/definitions.py:50 msgid "Standard function blocks" msgstr "标准功能类型" -#: ../ProjectController.py:1843 ../Beremiz_service.py:263 +#: ../ProjectController.py:1829 ../Beremiz_service.py:271 msgid "Start PLC" msgstr "开始PLC" -#: ../ProjectController.py:1046 +#: ../ProjectController.py:1074 #, python-format msgid "Start build in %s\n" msgstr "开始建立 %s\n" -#: ../ProjectController.py:1360 +#: ../ProjectController.py:1397 msgid "Started" msgstr "已开始" -#: ../ProjectController.py:1648 +#: ../ProjectController.py:1633 msgid "Starting PLC\n" msgstr "启动PLC\n" -#: ../BeremizIDE.py:365 +#: ../BeremizIDE.py:393 msgid "Status ToolBar" msgstr "状态工具栏" -#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391 +#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 msgid "Step" msgstr "步" -#: ../ProjectController.py:1846 +#: ../ProjectController.py:1835 msgid "Stop" msgstr "停止" -#: ../Beremiz_service.py:264 +#: ../Beremiz_service.py:272 msgid "Stop PLC" msgstr "停止PLC" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1836 msgid "Stop Running PLC" msgstr "停止运行PLC" -#: ../ProjectController.py:1361 +#: ../ProjectController.py:1398 msgid "Stopped" msgstr "已停止" -#: ../ProjectController.py:1620 -msgid "Stopping debugger...\n" -msgstr "停止调试器...\n" - -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Structure" msgstr "结构的" -#: ../editors/DataTypeEditor.py:54 +#: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "子集的" @@ -3132,19 +3140,19 @@ msgid "Subtraction" msgstr "减法" -#: ../ProjectController.py:1085 +#: ../ProjectController.py:1113 msgid "Successfully built.\n" msgstr "成功构建.\n" -#: ../IDEFrame.py:447 +#: ../IDEFrame.py:449 msgid "Switch perspective" msgstr "切换视图" -#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115 +#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118 msgid "Syntax error in regular expression of pattern to search!" msgstr "在模式搜索正则表达式语法错误!" -#: ../dialogs/DiscoveryDialog.py:93 +#: ../dialogs/DiscoveryDialog.py:90 msgid "TYPE" msgstr "类型" @@ -3152,19 +3160,19 @@ msgid "Tangent" msgstr "正切" -#: ../editors/ResourceEditor.py:83 +#: ../editors/ResourceEditor.py:97 msgid "Task" msgstr "任务 " -#: ../editors/ResourceEditor.py:235 +#: ../editors/ResourceEditor.py:248 msgid "Tasks:" msgstr "任务:" -#: ../controls/VariablePanel.py:73 +#: ../controls/VariablePanel.py:91 msgid "Temp" msgstr "缓冲" -#: ../version.py:30 +#: ../version.py:35 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3184,7 +3192,7 @@ "你可在这里订阅列表:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:180 +#: ../editors/FileManagementPanel.py:186 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3193,22 +3201,22 @@ "文件 '%s' 已经存在。\n" "你真的要替换它?" -#: ../editors/LDViewer.py:882 +#: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "块的组必须是连贯的!" -#: ../BeremizIDE.py:542 ../IDEFrame.py:1015 +#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 msgid "There are changes, do you want to save?" msgstr "文件已被改动。你希望保存吗?" -#: ../IDEFrame.py:1658 ../IDEFrame.py:1677 +#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 #, python-format msgid "" "There is a POU named \"%s\". This could cause a conflict. Do you wish to " "continue?" msgstr "一个编程组织单元被命名为\"%s\"。这可能会产生冲突。你希望继续吗?" -#: ../IDEFrame.py:1102 +#: ../IDEFrame.py:1133 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3216,11 +3224,11 @@ "打印出现问题。\n" "请检查你当前打印机设置。" -#: ../editors/LDViewer.py:891 +#: ../editors/LDViewer.py:902 msgid "This option isn't available yet!" msgstr "该选项尚未可用!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 #, python-format msgid "Tick: %d" msgstr "滴答: %d" @@ -3258,94 +3266,94 @@ msgid "Time-of-day subtraction" msgstr "日期时间减法" -#: ../dialogs/ForceVariableDialog.py:172 +#: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "触发值" -#: ../editors/Viewer.py:548 +#: ../editors/Viewer.py:584 msgid "Top" msgstr "顶部" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1848 msgid "Transfer" msgstr "传输" -#: ../ProjectController.py:1857 +#: ../ProjectController.py:1849 msgid "Transfer PLC" msgstr "传输PLC" -#: ../ProjectController.py:1820 +#: ../ProjectController.py:1802 msgid "Transfer completed successfully.\n" msgstr "传输成功\n" -#: ../ProjectController.py:1823 +#: ../ProjectController.py:1805 msgid "Transfer failed\n" msgstr "传输失败\n" -#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 -#: ../editors/Viewer.py:2420 +#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 +#: ../editors/Viewer.py:2453 msgid "Transition" msgstr "转换" -#: ../PLCGenerator.py:1518 +#: ../PLCGenerator.py:1564 #, python-format msgid "" "Transition \"%s\" body must contain an output variable or coil referring to " "its name" msgstr "转换 \"%s\" 体必须包含一个输出变量或圈指的是它的名字" -#: ../dialogs/PouTransitionDialog.py:84 +#: ../dialogs/PouTransitionDialog.py:91 msgid "Transition Name" msgstr "转换名字" -#: ../dialogs/PouTransitionDialog.py:53 +#: ../dialogs/PouTransitionDialog.py:60 msgid "Transition Name:" msgstr "转换名字:" -#: ../PLCGenerator.py:1609 +#: ../PLCGenerator.py:1657 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "转换的内容 \"{a1}\" 没有连接到下一步在 \"{a2}\" POU" -#: ../PLCGenerator.py:1598 +#: ../PLCGenerator.py:1646 #, python-brace-format msgid "" "Transition with content \"{a1}\" not connected to a previous step in " "\"{a2}\" POU" msgstr "转换的内容 \"{a1}\" 没有连接到前一步在 \"{a2}\" POU" -#: ../plcopen/plcopen.py:1323 +#: ../plcopen/plcopen.py:1526 #, python-format msgid "Transition with name %s doesn't exist!" msgstr "已命名的转换 %s 尚不存在!" -#: ../PLCControler.py:98 +#: ../plcopen/types_enums.py:76 msgid "Transitions" msgstr "转换" -#: ../dialogs/AboutDialog.py:131 +#: ../dialogs/AboutDialog.py:127 msgid "Translated by" msgstr "转换因为" -#: ../editors/ResourceEditor.py:68 +#: ../editors/ResourceEditor.py:76 msgid "Triggering" msgstr "触发" -#: ../Beremiz_service.py:478 +#: ../Beremiz_service.py:490 msgid "Twisted unavailable." msgstr "扭曲的不可用。" -#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83 -#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739 -#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54 +#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 +#: ../controls/VariablePanel.py:61 msgid "Type" msgstr "类型" -#: ../dialogs/BrowseLocationsDialog.py:49 +#: ../dialogs/BrowseLocationsDialog.py:54 msgid "Type and derivated" msgstr "类型和派生" -#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624 +#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666 #, python-format msgid "Type conflict for location \"%s\"" msgstr "位置的冲突类型 \"%s\"" @@ -3354,179 +3362,233 @@ msgid "Type conversion" msgstr "类型转换" -#: ../editors/DataTypeEditor.py:162 +#: ../editors/DataTypeEditor.py:170 msgid "Type infos:" msgstr "类型信息:" -#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:55 msgid "Type strict" msgstr "严格类型" -#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58 -#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100 -#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59 +#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "类型:" -#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476 +#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 +msgid "URI host:" +msgstr "URI主机:" + +#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46 +msgid "URI port:" +msgstr "URI端口:" + +#: ../controls/UriLocationEditor.py:35 +msgid "URI type:" +msgstr "URI 类型:" + +#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515 #, python-format msgid "Unable to define PDO mapping for node %02x" msgstr "对于 %02x节点不能定义POU映射" -#: ../targets/Xenomai/__init__.py:39 +#: ../targets/Xenomai/__init__.py:43 #, python-format msgid "Unable to get Xenomai's %s \n" msgstr "不能获得 Xenomai 的 %s \n" -#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214 +#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "未定义块类型 \"{a1}\" 在 \"{a2}\" POU中" -#: ../PLCGenerator.py:254 +#: ../PLCGenerator.py:261 #, python-format msgid "Undefined pou type \"%s\"" msgstr "未定义的pou类型" -#: ../IDEFrame.py:360 ../IDEFrame.py:421 +#: ../IDEFrame.py:365 ../IDEFrame.py:423 msgid "Undo" msgstr "撤销" -#: ../ProjectController.py:423 +#: ../ProjectController.py:442 msgid "Unknown" msgstr "未知" -#: ../editors/Viewer.py:394 +#: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "未知的变量 \"%s\" 这个POU!" -#: ../ProjectController.py:420 ../ProjectController.py:421 +#: ../ProjectController.py:439 ../ProjectController.py:440 msgid "Unnamed" msgstr "未命名" -#: ../PLCControler.py:638 +#: ../PLCControler.py:263 #, python-format msgid "Unnamed%d" msgstr "未命名%d" -#: ../controls/VariablePanel.py:284 +#: ../controls/VariablePanel.py:308 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "无法识别数据大小 \"%s\"" -#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827 +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 msgid "User Data Types" msgstr "用户数据类型" -#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86 +#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93 msgid "User Type" msgstr "用户类型" -#: ../PLCControler.py:97 +#: ../plcopen/types_enums.py:75 msgid "User-defined POUs" msgstr "用户 - 定义POUs" -#: ../dialogs/ActionBlockDialog.py:39 +#: ../dialogs/ActionBlockDialog.py:42 msgid "Value" msgstr "值" -#: ../editors/DataTypeEditor.py:259 +#: ../editors/DataTypeEditor.py:267 msgid "Values:" msgstr "值:" -#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585 -#: ../editors/Viewer.py:2423 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 +#: ../editors/Viewer.py:2456 msgid "Variable" msgstr "变量" -#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361 -#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329 +#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 +#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 msgid "Variable Drop" msgstr "变量Drop" -#: ../dialogs/FBDVariableDialog.py:64 +#: ../dialogs/FBDVariableDialog.py:68 msgid "Variable Properties" msgstr "变量属性" -#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290 -#: ../controls/VariablePanel.py:350 +#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 +#: ../controls/VariablePanel.py:379 msgid "Variable class" msgstr "变量种类" -#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387 +#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388 msgid "Variable don't belong to this POU!" msgstr "变量不属于这个POU!" -#: ../dialogs/LDElementDialog.py:89 +#: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "变量:" -#: ../controls/VariablePanel.py:72 +#: ../controls/VariablePanel.py:90 msgid "Variables" msgstr "变量" -#: ../controls/ProjectPropertiesPanel.py:152 +#: ../controls/ProjectPropertiesPanel.py:166 msgid "Vertical:" msgstr "垂直的:" -#: ../Beremiz_service.py:588 +#: ../runtime/WampClient.py:113 +#, python-format +msgid "WAMP Client connection failed (%s) .. retrying .." +msgstr "WAMP 客户端连接失败 (%s) .. 重试 .." + +#: ../runtime/WampClient.py:117 +#, python-format +msgid "WAMP Client connection lost (%s) .. retrying .." +msgstr "WAMP 客户端连接丢失 (%s) .. 重试 .." + +#: ../connectors/WAMP/dialog.py:54 +msgid "WAMP ID:" +msgstr "WAMP ID:" + +#: ../runtime/WampClient.py:172 +msgid "WAMP client connecting to :" +msgstr "WAMP 客户端连接到 :" + +#: ../runtime/WampClient.py:148 +msgid "WAMP client connection not established!" +msgstr "WAMP 客户端连接没有建立!" + +#: ../Beremiz_service.py:625 msgid "WAMP client startup failed. " msgstr "WAMP客户端启动失败。" -#: ../connectors/WAMP/__init__.py:91 +#: ../Beremiz_service.py:621 +msgid "WAMP config is incomplete." +msgstr "WAMP 配置不完整." + +#: ../Beremiz_service.py:623 +msgid "WAMP config is missing." +msgstr "WAMP 配置丢失." + +#: ../connectors/WAMP/__init__.py:99 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "WAMP 连接到 URL : %s\n" -#: ../connectors/WAMP/__init__.py:131 +#: ../connectors/WAMP/__init__.py:140 msgid "WAMP connection timeout" msgstr "WAMP连接超时" -#: ../connectors/WAMP/__init__.py:150 +#: ../connectors/WAMP/__init__.py:158 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "WAMP 连接到 '%s' 失败。\n" -#: ../Beremiz_service.py:564 +#: ../Beremiz_service.py:595 msgid "WAMP import failed :" msgstr "WAMP导入失败:" -#: ../wxglade_hmi/wxglade_hmi.py:37 +#: ../runtime/WampClient.py:126 +msgid "WAMP load error: " +msgstr "WAMP 加载错误: " + +#: ../runtime/WampClient.py:108 +msgid "WAMP session left" +msgstr "WAMP 会话残留" + +#: ../wxglade_hmi/wxglade_hmi.py:44 msgid "WXGLADE GUI" msgstr "WXGLADE 用户图形界面" -#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891 +#: ../runtime/WampClient.py:137 +msgid "Wamp secret load error:" +msgstr "Wamp 加密加载错误:" + +#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 msgid "Warning" msgstr "警告" -#: ../ProjectController.py:707 +#: ../ProjectController.py:726 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "警告在ST/IL/SFC代码生成器中:\n" -#: ../dialogs/SearchInProjectDialog.py:78 +#: ../dialogs/SearchInProjectDialog.py:82 msgid "Whole Project" msgstr "整个项目" -#: ../controls/ProjectPropertiesPanel.py:120 +#: ../controls/ProjectPropertiesPanel.py:134 msgid "Width:" msgstr "宽度:" -#: ../dialogs/FindInPouDialog.py:91 +#: ../dialogs/FindInPouDialog.py:94 msgid "Wrap search" msgstr "包搜索" -#: ../dialogs/AboutDialog.py:130 +#: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "出自" -#: ../features.py:34 +#: ../features.py:35 msgid "WxGlade GUI" msgstr "WxGlade GUI" -#: ../svgui/svgui.py:142 +#: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" @@ -3534,7 +3596,7 @@ "你没有写入的许可。\n" "无论如何都打开Inkscape?" -#: ../wxglade_hmi/wxglade_hmi.py:154 +#: ../wxglade_hmi/wxglade_hmi.py:160 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3542,7 +3604,7 @@ "你没有写入的许可。\n" "无论如何都打开wxGlade?" -#: ../ProjectController.py:371 +#: ../ProjectController.py:390 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3550,79 +3612,71 @@ "你必须有在此项目上工作的许可\n" "在项目的一个拷贝上工作?" -#: ../editors/LDViewer.py:886 +#: ../editors/LDViewer.py:897 msgid "" "You must select the block or group of blocks around which a branch should be" " added!" msgstr "你必须选择一个块或块的组围绕着需被添加的分支!" -#: ../editors/LDViewer.py:666 +#: ../editors/LDViewer.py:677 msgid "You must select the wire where a contact should be added!" msgstr "你必须选择一条线连接需被添加的接触点!" -#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46 +#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50 msgid "You must type a name!" msgstr "你必须输入一个名字!" -#: ../dialogs/ForceVariableDialog.py:193 +#: ../dialogs/ForceVariableDialog.py:209 msgid "You must type a value!" msgstr "你必须输入一个值!" -#: ../IDEFrame.py:438 +#: ../IDEFrame.py:440 msgid "Zoom" msgstr "显示比例" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "days" msgstr "日" -#: ../PLCOpenEditor.py:343 +#: ../PLCOpenEditor.py:317 #, python-format msgid "error: %s\n" msgstr "错误:%s\n" -#: ../util/ProcessLogger.py:169 +#: ../util/ProcessLogger.py:178 #, python-brace-format msgid "exited with status {a1} (pid {a2})\n" msgstr "退出伴随状态 {a1} (pid {a2})\n" -#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 -msgid "file : " -msgstr "文件:" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "function" msgstr "功能" -#: ../PLCOpenEditor.py:409 -msgid "function : " -msgstr "功能:" - -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "functionBlock" msgstr "功能块" -#: ../dialogs/DurationEditorDialog.py:155 +#: ../dialogs/DurationEditorDialog.py:158 msgid "hours" msgstr "小时" -#: ../PLCOpenEditor.py:409 -msgid "line : " -msgstr "在线:" - -#: ../dialogs/DurationEditorDialog.py:157 +#: ../ProjectController.py:753 +msgid "matiec installation is not found\n" +msgstr "matiec安装没有发现\n" + +#: ../dialogs/DurationEditorDialog.py:160 msgid "milliseconds" msgstr "毫秒" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "分" -#: ../dialogs/PouDialog.py:32 +#: ../dialogs/PouDialog.py:36 msgid "program" msgstr "程序" -#: ../dialogs/DurationEditorDialog.py:156 +#: ../dialogs/DurationEditorDialog.py:159 msgid "seconds" msgstr "秒" @@ -3638,27 +3692,27 @@ msgid "string right of" msgstr "从右取字符串" -#: ../Beremiz.py:164 +#: ../Beremiz.py:167 msgid "update info unavailable." msgstr "更新信息不存在" -#: ../PLCOpenEditor.py:341 +#: ../PLCOpenEditor.py:315 #, python-format msgid "warning: %s\n" msgstr "警告:%s\n" -#: ../PLCControler.py:972 +#: ../PLCControler.py:576 #, python-brace-format msgid "{a1} \"{a2}\" can't be pasted as a {a3}." msgstr "{a1} \"{a2}\" 不能被粘贴作为一个 {a3}." -#: ../ConfigTreeNode.py:56 +#: ../ConfigTreeNode.py:58 #, python-brace-format msgid "" -"{a1} XML file doesn't follow XSD schema at line %{a2}:\n" +"{a1} XML file doesn't follow XSD schema at line {a2}:\n" "{a3}" msgstr "" -"{a1} XML文件没有遵循XSD schema在行 %{a2}:\n" +"{a1} XML文件没有遵循XSD schema在行 {a2}:\n" "{a3}" #: Extra XSD strings @@ -3722,6 +3776,72 @@ msgid "Win32" msgstr "Win32" +msgid "ModbusRequest" +msgstr "Modbus请求" + +msgid "SlaveID" +msgstr "从站ID" + +msgid "Nr_of_Channels" +msgstr "通道号" + +msgid "Start_Address" +msgstr "起始地址" + +msgid "Timeout_in_ms" +msgstr "超时 ms单位" + +msgid "MemoryArea" +msgstr "存储区域" + +msgid "MemoryAreaType" +msgstr "存储区域类型" + +msgid "ModbusTCPclient" +msgstr "ModubsTCP客户端" + +msgid "Remote_IP_Address" +msgstr "远程IP地址" + +msgid "Remote_Port_Number" +msgstr "远程端口号" + +msgid "Invocation_Rate_in_ms" +msgstr "调用率ms单位" + +msgid "ModbusServerNode" +msgstr "Modbus服务器节点" + +msgid "Local_IP_Address" +msgstr "本地IP地址" + +msgid "Local_Port_Number" +msgstr "本地端口号" + +msgid "ModbusRTUclient" +msgstr "ModbusRTC客户端" + +msgid "Serial_Port" +msgstr "串行端口" + +msgid "Baud_Rate" +msgstr "波特率" + +msgid "Parity" +msgstr "奇偶校验" + +msgid "Stop_Bits" +msgstr "停止位" + +msgid "ModbusRTUslave" +msgstr "ModbusRTU从站" + +msgid "ModbusRoot" +msgstr "Modbus根" + +msgid "MaxRemoteTCPclients" +msgstr "最大远程TCP客户端" + msgid "BaseParams" msgstr "基本参照 " @@ -3896,7 +4016,7 @@ msgid "" "The semaphore provides a mechanism to allow software elements mutually " -"exclusive access to certain ressources." +"exclusive access to certain resources." msgstr "信号量提供一种机制,允许软件元素互斥排他的访问某一资源。" msgid "The output produces a single pulse when a rising edge is detected." diff -r e0f16317668e -r 15f18dc8b56a i18n/Makefile --- a/i18n/Makefile Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/Makefile Fri Nov 23 00:33:04 2018 +0100 @@ -16,4 +16,12 @@ echo "../plcopen/Additional_Function_Blocks.xml" >> app.fil echo "../plcopen/Standard_Function_Blocks.xml" >> app.fil +transifex_init: + tx init --skipsetup + +transifex_pull: + tx pull --all + find . -name '*.po' -exec sed -i 's/charset=CHARSET/charset=UTF-8/' {} \; + + .PHONY: all, template, locales, source_list diff -r e0f16317668e -r 15f18dc8b56a i18n/app.fil --- a/i18n/app.fil Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/app.fil Fri Nov 23 00:33:04 2018 +0100 @@ -21,6 +21,7 @@ ../dialogs/ArrayTypeDialog.py ../dialogs/PouNameDialog.py ../dialogs/BrowseLocationsDialog.py +../dialogs/CommentEditDialog.py ../dialogs/FBDBlockDialog.py ../dialogs/ConnectionDialog.py ../dialogs/BrowseValuesLibraryDialog.py @@ -35,6 +36,12 @@ ../graphics/LD_Objects.py ../graphics/SFC_Objects.py ../graphics/GraphicCommons.py +../bacnet/BacnetSlaveEditor.py +../bacnet/bacnet.py +../bacnet/ede_files/template_ObjTypes.csv +../bacnet/ede_files/template_Units.csv +../bacnet/ede_files/template_EDE.csv +../bacnet/ede_files/template_StateTexts.csv ../connectors/PYRO/__init__.py ../connectors/PYRO/dialog.py ../connectors/__init__.py @@ -56,8 +63,17 @@ ../py_ext/PythonFileCTNMixin.py ../wxglade_hmi/wxglade_hmi.py ../modbus/modbus.py +../etherlab/EthercatCIA402Slave.py +../etherlab/EtherCATManagementEditor.py +../etherlab/CommonEtherCATFunction.py +../etherlab/EthercatSlave.py +../etherlab/etherlab.py +../etherlab/EthercatCFileGenerator.py +../etherlab/ConfigEditor.py +../etherlab/EthercatMaster.py ../runtime/NevowServer.py ../runtime/WampClient.py +../runtime/PlcStatus.py ../runtime/PLCObject.py ../runtime/ServicePublisher.py ../ConfigTreeNode.py diff -r e0f16317668e -r 15f18dc8b56a i18n/messages.po --- a/i18n/messages.po Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/messages.po Fri Nov 23 00:33:04 2018 +0100 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-15 16:39+0300\n" -"PO-Revision-Date: 2018-06-15 16:39+0300\n" +"POT-Creation-Date: 2018-10-03 14:20+0300\n" +"PO-Revision-Date: 2018-10-03 14:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en_US\n" @@ -42,37 +42,46 @@ "\n" "Traceback:\n" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid " External" msgstr " External" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " InOut" msgstr " InOut" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " Input" msgstr " Input" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid " Local" msgstr " Local" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " Output" msgstr " Output" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid " Temp" msgstr " Temp" -#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#: ../etherlab/etherlab.py:301 +#, python-format +msgid " (rev. %s)" +msgstr " (rev. %s)" + +#: ../etherlab/CommonEtherCATFunction.py:1599 +msgid " Warning..." +msgstr " Warning..." + +#: ../dialogs/PouTransitionDialog.py:100 ../dialogs/ProjectDialog.py:72 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:157 #, python-format msgid " and %s" msgstr " and %s" -#: ../ProjectController.py:1182 +#: ../ProjectController.py:1236 msgid " generation failed !\n" msgstr " generation failed !\n" @@ -96,7 +105,7 @@ msgid "\"%s\" can't use itself!" msgstr "\"%s\" can't use itself!" -#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#: ../IDEFrame.py:1705 ../IDEFrame.py:1724 #, python-format msgid "\"%s\" config already exists!" msgstr "\"%s\" config already exists!" @@ -111,32 +120,32 @@ msgid "\"%s\" configuration doesn't exist !!!" msgstr "\"%s\" configuration doesn't exist !!!" -#: ../IDEFrame.py:1638 +#: ../IDEFrame.py:1655 #, python-format msgid "\"%s\" data type already exists!" msgstr "\"%s\" data type already exists!" -#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouTransitionDialog.py:111 ../dialogs/BlockPreviewDialog.py:220 #: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 #: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 #: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 -#: ../controls/VariablePanel.py:425 +#: ../controls/VariablePanel.py:424 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "\"%s\" element for this pou already exists!" -#: ../BeremizIDE.py:928 +#: ../BeremizIDE.py:925 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "\"%s\" folder is not a valid Beremiz project\n" -#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:107 #: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 -#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 -#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 -#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 -#: ../IDEFrame.py:1629 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:164 +#: ../etherlab/ConfigEditor.py:973 ../editors/ResourceEditor.py:481 +#: ../editors/ResourceEditor.py:518 ../editors/DataTypeEditor.py:571 +#: ../editors/DataTypeEditor.py:603 ../editors/CodeFileEditor.py:793 +#: ../controls/VariablePanel.py:798 ../IDEFrame.py:1646 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "\"%s\" is a keyword. It can't be used!" @@ -151,27 +160,28 @@ msgid "\"%s\" is not a valid folder!" msgstr "\"%s\" is not a valid folder!" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:105 #: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 -#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 -#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 -#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 -#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:162 +#: ../etherlab/ConfigEditor.py:971 ../editors/ResourceEditor.py:479 +#: ../editors/ResourceEditor.py:516 ../editors/DataTypeEditor.py:601 +#: ../editors/CodeFileEditor.py:791 ../controls/VariablePanel.py:796 +#: ../IDEFrame.py:1644 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "\"%s\" is not a valid identifier!" -#: ../IDEFrame.py:2436 +#: ../IDEFrame.py:2454 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "\"%s\" is used by one or more POUs. Do you wish to continue?" -#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:166 #: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 #: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 #: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 -#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 -#: ../IDEFrame.py:1647 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:363 +#: ../IDEFrame.py:1664 #, python-format msgid "\"%s\" pou already exists!" msgstr "\"%s\" pou already exists!" @@ -200,7 +210,7 @@ "\"%s\" value isn't a valid array dimension!\n" "Right value must be greater than left value." -#: ../PLCGenerator.py:1133 +#: ../PLCGenerator.py:1182 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" @@ -220,35 +230,35 @@ msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:559 #, python-format msgid "%03gms" msgstr "%03gms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:550 #, python-format msgid "%dd" msgstr "%dd" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:189 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:551 #, python-format msgid "%dh" msgstr "%dh" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:188 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:552 #, python-format msgid "%dm" msgstr "%dm" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:186 #, python-format msgid "%dms" msgstr "%dms" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:187 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:553 #, python-format msgid "%ds" msgstr "%ds" @@ -281,7 +291,12 @@ msgid "%s body don't have text!" msgstr "%s body don't have text!" -#: ../IDEFrame.py:388 +#: ../etherlab/ConfigEditor.py:856 +#, python-format +msgid "%s's nodes" +msgstr "%s's nodes" + +#: ../IDEFrame.py:391 msgid "&Add Element" msgstr "&Add Element" @@ -290,35 +305,35 @@ msgid "&Close" msgstr "&Close" -#: ../IDEFrame.py:361 +#: ../IDEFrame.py:364 msgid "&Configuration" msgstr "&Configuration" -#: ../IDEFrame.py:350 +#: ../IDEFrame.py:353 msgid "&Data Type" msgstr "&Data Type" -#: ../IDEFrame.py:392 +#: ../IDEFrame.py:395 msgid "&Delete" msgstr "&Delete" -#: ../IDEFrame.py:342 +#: ../IDEFrame.py:345 msgid "&Display" msgstr "&Display" -#: ../IDEFrame.py:341 +#: ../IDEFrame.py:344 msgid "&Edit" msgstr "&Edit" -#: ../IDEFrame.py:340 +#: ../IDEFrame.py:343 msgid "&File" msgstr "&File" -#: ../IDEFrame.py:352 +#: ../IDEFrame.py:355 msgid "&Function" msgstr "&Function" -#: ../IDEFrame.py:343 +#: ../IDEFrame.py:346 msgid "&Help" msgstr "&Help" @@ -326,7 +341,7 @@ msgid "&License" msgstr "&License" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:359 msgid "&Program" msgstr "&Program" @@ -338,10 +353,14 @@ msgid "&Recent Projects" msgstr "&Recent Projects" -#: ../IDEFrame.py:358 +#: ../IDEFrame.py:361 msgid "&Resource" msgstr "&Resource" +#: ../etherlab/ConfigEditor.py:450 +msgid "'Read from' and 'Write to' variables types are not compatible" +msgstr "'Read from' and 'Write to' variables types are not compatible" + #: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" @@ -352,7 +371,7 @@ msgid "'{a1}' - {a2} matches in project" msgstr "'{a1}' - {a2} matches in project" -#: ../connectors/PYRO/__init__.py:98 +#: ../connectors/PYRO/__init__.py:99 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "'{a1}' is located at {a2}\n" @@ -362,8 +381,8 @@ msgid "(%d matches)" msgstr "(%d matches)" -#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 -#: ../dialogs/PouDialog.py:124 +#: ../dialogs/PouTransitionDialog.py:102 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:159 #, python-format msgid ", %s" msgstr ", %s" @@ -388,15 +407,15 @@ msgid "1s" msgstr "1s" -#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 -#: ../IDEFrame.py:1715 +#: ../dialogs/PouDialog.py:168 ../IDEFrame.py:1667 ../IDEFrame.py:1713 +#: ../IDEFrame.py:1732 #, python-format msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?" msgstr "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?" -#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:109 #: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 -#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#: ../controls/VariablePanel.py:800 ../IDEFrame.py:1681 ../IDEFrame.py:1694 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "A POU named \"%s\" already exists!" @@ -406,21 +425,21 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "A child named \"{a1}\" already exists -> \"{a2}\"\n" -#: ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseLocationsDialog.py:228 msgid "A location must be selected!" msgstr "A location must be selected!" -#: ../editors/ResourceEditor.py:485 +#: ../editors/ResourceEditor.py:483 msgid "A task with the same name already exists!" msgstr "A task with the same name already exists!" -#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 -#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:802 +#: ../IDEFrame.py:1683 ../IDEFrame.py:1696 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "A variable with \"%s\" as name already exists in this pou!" -#: ../editors/CodeFileEditor.py:778 +#: ../editors/CodeFileEditor.py:797 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "A variable with \"%s\" as name already exists!" @@ -433,11 +452,15 @@ msgid "Absolute number" msgstr "Absolute number" +#: ../etherlab/ConfigEditor.py:48 +msgid "Access" +msgstr "Access" + #: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "Action" -#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +#: ../editors/Viewer.py:656 ../editors/Viewer.py:2429 msgid "Action Block" msgstr "Action Block" @@ -462,56 +485,64 @@ msgid "Actions:" msgstr "Actions:" -#: ../editors/Viewer.py:473 +#: ../editors/Viewer.py:484 msgid "Active" msgstr "Active" #: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 -#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +#: ../BeremizIDE.py:998 ../editors/Viewer.py:689 msgid "Add" msgstr "Add" -#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +#: ../IDEFrame.py:1941 ../IDEFrame.py:1976 msgid "Add Action" msgstr "Add Action" -#: ../features.py:33 +#: ../features.py:22 msgid "Add C code accessing located variables synchronously" msgstr "Add C code accessing located variables synchronously" -#: ../IDEFrame.py:1907 +#: ../IDEFrame.py:1924 msgid "Add Configuration" msgstr "Add Configuration" -#: ../IDEFrame.py:1887 +#: ../IDEFrame.py:1904 msgid "Add DataType" msgstr "Add DataType" -#: ../editors/Viewer.py:609 +#: ../editors/Viewer.py:612 msgid "Add Divergence Branch" msgstr "Add Divergence Branch" +#: ../etherlab/EthercatMaster.py:297 +msgid "Add Ethercat Slave" +msgstr "Add Ethercat Slave" + +#: ../etherlab/EthercatMaster.py:297 +msgid "Add Ethercat Slave to Master" +msgstr "Add Ethercat Slave to Master" + #: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "Add IP" -#: ../IDEFrame.py:1895 +#: ../IDEFrame.py:1912 msgid "Add POU" msgstr "Add POU" -#: ../features.py:34 +#: ../features.py:23 msgid "Add Python code executed asynchronously" msgstr "Add Python code executed asynchronously" -#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +#: ../IDEFrame.py:1952 ../IDEFrame.py:2002 msgid "Add Resource" msgstr "Add Resource" -#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +#: ../IDEFrame.py:1930 ../IDEFrame.py:1973 msgid "Add Transition" msgstr "Add Transition" -#: ../editors/Viewer.py:596 +#: ../editors/Viewer.py:599 msgid "Add Wire Segment" msgstr "Add Wire Segment" @@ -519,7 +550,7 @@ msgid "Add a new initial step" msgstr "Add a new initial step" -#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +#: ../editors/Viewer.py:2790 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "Add a new jump" @@ -527,7 +558,7 @@ msgid "Add a new step" msgstr "Add a new step" -#: ../features.py:35 +#: ../features.py:24 msgid "Add a simple WxGlade based GUI." msgstr "Add a simple WxGlade based GUI." @@ -539,22 +570,49 @@ msgid "Add element" msgstr "Add element" -#: ../editors/ResourceEditor.py:283 +#: ../etherlab/ConfigEditor.py:1388 +msgid "Add file from ESI files database" +msgstr "Add file from ESI files database" + +#: ../etherlab/ConfigEditor.py:1360 +msgid "Add file to project" +msgstr "Add file to project" + +#: ../editors/ResourceEditor.py:281 msgid "Add instance" msgstr "Add instance" +#: ../etherlab/ConfigEditor.py:652 +msgid "Add process variable" +msgstr "Add process variable" + #: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "Add slave" -#: ../editors/ResourceEditor.py:252 +#: ../etherlab/ConfigEditor.py:679 +msgid "Add startup service variable" +msgstr "Add startup service variable" + +#: ../editors/ResourceEditor.py:250 msgid "Add task" msgstr "Add task" -#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +#: ../bacnet/BacnetSlaveEditor.py:811 ../editors/CodeFileEditor.py:672 +#: ../controls/VariablePanel.py:483 msgid "Add variable" msgstr "Add variable" +#: ../etherlab/etherlab.py:186 +msgid "" +"Adding a PDO not defined in default configuration\n" +"for mapping needed location variables\n" +"(1 if possible)" +msgstr "" +"Adding a PDO not defined in default configuration\n" +"for mapping needed location variables\n" +"(1 if possible)" + #: ../plcopen/iec_std.csv:33 msgid "Addition" msgstr "Addition" @@ -563,27 +621,28 @@ msgid "Additional function blocks" msgstr "Additional function blocks" -#: ../editors/Viewer.py:669 +#: ../editors/Viewer.py:672 msgid "Adjust Block Size" msgstr "Adjust Block Size" -#: ../editors/Viewer.py:1720 +#: ../editors/Viewer.py:1722 msgid "Alignment" msgstr "Alignment" #: ../dialogs/BrowseLocationsDialog.py:42 -#: ../dialogs/BrowseLocationsDialog.py:53 -#: ../dialogs/BrowseLocationsDialog.py:152 -#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 -#: ../controls/VariablePanel.py:88 +#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:151 +#: ../dialogs/BrowseLocationsDialog.py:154 ../etherlab/ConfigEditor.py:65 +#: ../etherlab/ConfigEditor.py:853 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:85 msgid "All" msgstr "All" -#: ../editors/FileManagementPanel.py:37 +#: ../editors/FileManagementPanel.py:51 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "All files (*.*)|*.*|CSV files (*.csv)|*.csv" -#: ../ProjectController.py:1670 +#: ../ProjectController.py:1752 msgid "Already connected. Please disconnect\n" msgstr "Already connected. Please disconnect\n" @@ -596,6 +655,23 @@ msgid "An instance with the same name already exists!" msgstr "An instance with the same name already exists!" +#: ../etherlab/ConfigEditor.py:975 +#, python-format +msgid "An variable named \"%s\" already exists!" +msgstr "An variable named \"%s\" already exists!" + +#: ../bacnet/BacnetSlaveEditor.py:935 +msgid "Analog Input Objects" +msgstr "Analog Input Objects" + +#: ../bacnet/BacnetSlaveEditor.py:934 +msgid "Analog Output Objects" +msgstr "Analog Output Objects" + +#: ../bacnet/BacnetSlaveEditor.py:933 +msgid "Analog Value Objects" +msgstr "Analog Value Objects" + #: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "Apply name modification to all continuations with the same name" @@ -617,7 +693,7 @@ msgstr "Arithmetic" #: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 -#: ../controls/VariablePanel.py:872 +#: ../controls/VariablePanel.py:883 msgid "Array" msgstr "Array" @@ -625,22 +701,34 @@ msgid "Assignment" msgstr "Assignment" -#: ../dialogs/FBDVariableDialog.py:226 +#: ../dialogs/FBDVariableDialog.py:227 msgid "At least a variable or an expression must be selected!" msgstr "At least a variable or an expression must be selected!" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:113 msgid "Author" msgstr "Author" -#: ../controls/ProjectPropertiesPanel.py:108 +#: ../controls/ProjectPropertiesPanel.py:110 msgid "Author Name (optional):" msgstr "Author Name (optional):" +#: ../etherlab/EthercatCIA402Slave.py:125 +msgid "Axis Pos" +msgstr "Axis Pos" + +#: ../etherlab/EthercatCIA402Slave.py:118 +msgid "Axis Ref" +msgstr "Axis Ref" + #: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "Backward" +#: ../features.py:19 +msgid "Bacnet support" +msgstr "Bacnet support" + #: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" @@ -651,14 +739,30 @@ msgid "Base Type:" msgstr "Base Type:" -#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:841 msgid "Base Types" msgstr "Base Types" -#: ../BeremizIDE.py:483 +#: ../BeremizIDE.py:479 msgid "Beremiz" msgstr "Beremiz" +#: ../runtime/NevowServer.py:201 +msgid "Beremiz Runtime Settings" +msgstr "Beremiz Runtime Settings" + +#: ../bacnet/BacnetSlaveEditor.py:938 +msgid "Binary Input Objects" +msgstr "Binary Input Objects" + +#: ../bacnet/BacnetSlaveEditor.py:937 +msgid "Binary Output Objects" +msgstr "Binary Output Objects" + +#: ../bacnet/BacnetSlaveEditor.py:936 +msgid "Binary Value Objects" +msgstr "Binary Value Objects" + #: ../plcopen/iec_std.csv:70 msgid "Binary selection (1 of 2)" msgstr "Binary selection (1 of 2)" @@ -687,7 +791,7 @@ msgid "Bitwise inverting" msgstr "Bitwise inverting" -#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +#: ../editors/Viewer.py:624 ../editors/Viewer.py:2442 msgid "Block" msgstr "Block" @@ -699,11 +803,11 @@ msgid "Block name" msgstr "Block name" -#: ../editors/Viewer.py:586 +#: ../editors/Viewer.py:589 msgid "Bottom" msgstr "Bottom" -#: ../ProjectController.py:1400 +#: ../runtime/PlcStatus.py:11 msgid "Broken" msgstr "Broken" @@ -712,27 +816,27 @@ msgid "Browse %s values library" msgstr "Browse %s values library" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:69 msgid "Browse Locations" msgstr "Browse Locations" -#: ../ProjectController.py:1815 +#: ../ProjectController.py:1898 msgid "Build" msgstr "Build" -#: ../ProjectController.py:1335 +#: ../ProjectController.py:1397 msgid "Build directory already clean\n" msgstr "Build directory already clean\n" -#: ../ProjectController.py:1816 +#: ../ProjectController.py:1899 msgid "Build project into build folder" msgstr "Build project into build folder" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1155 msgid "C Build crashed !\n" msgstr "C Build crashed !\n" -#: ../ProjectController.py:1105 +#: ../ProjectController.py:1152 msgid "C Build failed.\n" msgstr "C Build failed.\n" @@ -740,7 +844,7 @@ msgid "C code" msgstr "C code" -#: ../ProjectController.py:1186 +#: ../ProjectController.py:1240 msgid "C code generated successfully.\n" msgstr "C code generated successfully.\n" @@ -753,7 +857,7 @@ msgid "C compilation of %s failed.\n" msgstr "C compilation of %s failed.\n" -#: ../features.py:33 +#: ../features.py:22 msgid "C extension" msgstr "C extension" @@ -769,16 +873,20 @@ msgid "CANOpen slave" msgstr "CANOpen slave" -#: ../features.py:31 +#: ../features.py:18 msgid "CANopen support" msgstr "CANopen support" +#: ../etherlab/ConfigEditor.py:858 +msgid "CIA402 nodes" +msgstr "CIA402 nodes" + #: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 #: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "Can only generate execution order on FBD networks!" -#: ../controls/VariablePanel.py:291 +#: ../controls/VariablePanel.py:290 msgid "Can only give a location to local or global variables" msgstr "Can only give a location to local or global variables" @@ -787,7 +895,7 @@ msgid "Can't generate program to file %s!" msgstr "Can't generate program to file %s!" -#: ../controls/VariablePanel.py:289 +#: ../controls/VariablePanel.py:288 msgid "Can't give a location to a function block instance" msgstr "Can't give a location to a function block instance" @@ -796,7 +904,7 @@ msgid "Can't save project to file %s!" msgstr "Can't save project to file %s!" -#: ../controls/VariablePanel.py:339 +#: ../controls/VariablePanel.py:338 msgid "Can't set an initial value to a function block instance" msgstr "Can't set an initial value to a function block instance" @@ -810,11 +918,11 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "Cannot find lower free IEC channel than %d\n" -#: ../connectors/PYRO/__init__.py:139 +#: ../connectors/PYRO/__init__.py:140 msgid "Cannot get PLC status - connection failed.\n" msgstr "Cannot get PLC status - connection failed.\n" -#: ../ProjectController.py:967 +#: ../ProjectController.py:1013 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "Cannot open/parse VARIABLES.csv!\n" @@ -823,7 +931,7 @@ msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))" -#: ../ProjectController.py:1761 +#: ../ProjectController.py:1842 msgid "Cannot transfer while PLC is running. Stop it now?" msgstr "Cannot transfer while PLC is running. Stop it now?" @@ -831,27 +939,27 @@ msgid "Case sensitive" msgstr "Case sensitive" -#: ../editors/Viewer.py:581 +#: ../editors/Viewer.py:584 msgid "Center" msgstr "Center" -#: ../Beremiz_service.py:276 +#: ../Beremiz_service.py:289 msgid "Change IP of interface to bind" msgstr "Change IP of interface to bind" -#: ../Beremiz_service.py:275 +#: ../Beremiz_service.py:288 msgid "Change Name" msgstr "Change Name" -#: ../IDEFrame.py:1977 +#: ../IDEFrame.py:1994 msgid "Change POU Type To" msgstr "Change POU Type To" -#: ../Beremiz_service.py:277 +#: ../Beremiz_service.py:290 msgid "Change Port Number" msgstr "Change Port Number" -#: ../Beremiz_service.py:278 +#: ../Beremiz_service.py:291 msgid "Change working directory" msgstr "Change working directory" @@ -863,16 +971,21 @@ msgid "Choose a SVG file" msgstr "Choose a SVG file" -#: ../ProjectController.py:561 +#: ../etherlab/EtherCATManagementEditor.py:911 +#: ../etherlab/EtherCATManagementEditor.py:1306 +msgid "Choose a binary file" +msgstr "Choose a binary file" + +#: ../ProjectController.py:582 msgid "Choose a directory to save project" msgstr "Choose a directory to save project" -#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 -#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +#: ../canfestival/canfestival.py:171 ../bacnet/bacnet.py:434 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "Choose a file" -#: ../BeremizIDE.py:900 +#: ../BeremizIDE.py:897 msgid "Choose a project" msgstr "Choose a project" @@ -881,19 +994,23 @@ msgid "Choose a value for %s:" msgstr "Choose a value for %s:" -#: ../Beremiz_service.py:333 +#: ../Beremiz_service.py:346 msgid "Choose a working directory " msgstr "Choose a working directory " -#: ../BeremizIDE.py:864 +#: ../etherlab/ConfigEditor.py:1234 +msgid "Choose an XML file" +msgstr "Choose an XML file" + +#: ../BeremizIDE.py:861 msgid "Choose an empty directory for new project" msgstr "Choose an empty directory for new project" -#: ../ProjectController.py:468 +#: ../ProjectController.py:483 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "Chosen folder doesn't contain a program. It's not a valid project!" -#: ../ProjectController.py:435 +#: ../ProjectController.py:450 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "Chosen folder isn't empty. You can't use it for a new project!" @@ -901,15 +1018,15 @@ msgid "Class" msgstr "Class" -#: ../controls/VariablePanel.py:472 +#: ../controls/VariablePanel.py:474 msgid "Class Filter:" msgstr "Class Filter:" -#: ../dialogs/FBDVariableDialog.py:74 +#: ../dialogs/FBDVariableDialog.py:75 msgid "Class:" msgstr "Class:" -#: ../ProjectController.py:1821 +#: ../ProjectController.py:1904 msgid "Clean" msgstr "Clean" @@ -917,32 +1034,33 @@ msgid "Clean log messages" msgstr "Clean log messages" -#: ../ProjectController.py:1822 +#: ../ProjectController.py:1905 msgid "Clean project build folder" msgstr "Clean project build folder" -#: ../ProjectController.py:1332 +#: ../ProjectController.py:1394 msgid "Cleaning the build directory\n" msgstr "Cleaning the build directory\n" -#: ../IDEFrame.py:437 +#: ../IDEFrame.py:439 msgid "Clear Errors" msgstr "Clear Errors" -#: ../editors/Viewer.py:680 +#: ../editors/Viewer.py:683 msgid "Clear Execution Order" msgstr "Clear Execution Order" #: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +#: ../etherlab/ConfigEditor.py:1361 msgid "Close" msgstr "Close" -#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +#: ../BeremizIDE.py:623 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "Close Application" -#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 -#: ../IDEFrame.py:1040 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:562 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1053 msgid "Close Project" msgstr "Close Project" @@ -950,28 +1068,32 @@ msgid "Close Tab" msgstr "Close Tab" -#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +#: ../editors/Viewer.py:641 ../editors/Viewer.py:2450 msgid "Coil" msgstr "Coil" -#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +#: ../editors/Viewer.py:662 ../editors/LDViewer.py:517 msgid "Comment" msgstr "Comment" +#: ../etherlab/ConfigEditor.py:66 +msgid "Communication Parameters" +msgstr "Communication Parameters" + #: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 #: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "Community support" -#: ../dialogs/ProjectDialog.py:65 +#: ../dialogs/ProjectDialog.py:63 msgid "Company Name" msgstr "Company Name" -#: ../controls/ProjectPropertiesPanel.py:106 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Company Name (required):" msgstr "Company Name (required):" -#: ../controls/ProjectPropertiesPanel.py:107 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Company URL (optional):" msgstr "Company URL (optional):" @@ -979,7 +1101,7 @@ msgid "Comparison" msgstr "Comparison" -#: ../ProjectController.py:756 +#: ../ProjectController.py:787 msgid "Compiling IEC Program into C code...\n" msgstr "Compiling IEC Program into C code...\n" @@ -1005,25 +1127,25 @@ #: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 #: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:353 msgid "Confirm or change variable name" msgstr "Confirm or change variable name" -#: ../ProjectController.py:1842 +#: ../ProjectController.py:1925 msgid "Connect" msgstr "Connect" -#: ../ProjectController.py:1843 +#: ../ProjectController.py:1926 msgid "Connect to the target PLC" msgstr "Connect to the target PLC" -#: ../ProjectController.py:1391 +#: ../ProjectController.py:1469 #, python-format msgid "Connected to URI: %s" msgstr "Connected to URI: %s" -#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 -#: ../editors/Viewer.py:2441 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:626 +#: ../editors/Viewer.py:2443 msgid "Connection" msgstr "Connection" @@ -1031,25 +1153,25 @@ msgid "Connection Properties" msgstr "Connection Properties" -#: ../ProjectController.py:1691 +#: ../ProjectController.py:1773 msgid "Connection canceled!\n" msgstr "Connection canceled!\n" -#: ../ProjectController.py:1714 +#: ../ProjectController.py:1797 #, python-format msgid "Connection failed to %s!\n" msgstr "Connection failed to %s!\n" -#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +#: ../connectors/PYRO/__init__.py:124 ../connectors/WAMP/__init__.py:121 msgid "Connection lost!\n" msgstr "Connection lost!\n" -#: ../connectors/PYRO/__init__.py:110 +#: ../connectors/PYRO/__init__.py:111 #, python-format msgid "Connection to '%s' failed.\n" msgstr "Connection to '%s' failed.\n" -#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1678 msgid "Connector" msgstr "Connector" @@ -1057,7 +1179,7 @@ msgid "Connectors:" msgstr "Connectors:" -#: ../BeremizIDE.py:378 +#: ../BeremizIDE.py:374 msgid "Console" msgstr "Console" @@ -1065,18 +1187,22 @@ msgid "Constant" msgstr "Constant" -#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +#: ../editors/Viewer.py:637 ../editors/Viewer.py:2446 msgid "Contact" msgstr "Contact" -#: ../controls/ProjectPropertiesPanel.py:217 +#: ../controls/ProjectPropertiesPanel.py:219 msgid "Content Description (optional):" msgstr "Content Description (optional):" -#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1679 msgid "Continuation" msgstr "Continuation" +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Control Byte" +msgstr "Control Byte" + #: ../plcopen/iec_std.csv:18 msgid "Conversion from BCD" msgstr "Conversion from BCD" @@ -1093,20 +1219,20 @@ msgid "Conversion to time-of-day" msgstr "Conversion to time-of-day" -#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 -#: ../IDEFrame.py:427 +#: ../editors/Viewer.py:698 ../controls/LogViewer.py:713 ../IDEFrame.py:375 +#: ../IDEFrame.py:428 msgid "Copy" msgstr "Copy" -#: ../IDEFrame.py:1964 +#: ../IDEFrame.py:1981 msgid "Copy POU" msgstr "Copy POU" -#: ../editors/FileManagementPanel.py:68 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from left folder to right" msgstr "Copy file from left folder to right" -#: ../editors/FileManagementPanel.py:67 +#: ../editors/FileManagementPanel.py:66 msgid "Copy file from right folder to left" msgstr "Copy file from right folder to left" @@ -1128,6 +1254,16 @@ msgid "Couldn't import old %s file." msgstr "Couldn't import old %s file." +#: ../etherlab/EthercatMaster.py:258 +#, python-format +msgid "Couldn't load %s network configuration file." +msgstr "Couldn't load %s network configuration file." + +#: ../etherlab/EthercatMaster.py:279 +#, python-format +msgid "Couldn't load %s network process variables file." +msgstr "Couldn't load %s network process variables file." + #: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" @@ -1146,15 +1282,24 @@ "Couldn't load confnode parameters {a1} :\n" " {a2}" +#: ../etherlab/etherlab.py:264 +#, python-brace-format +msgid "" +"Couldn't load {a1} XML file:\n" +"{a2}" +msgstr "" +"Couldn't load {a1} XML file:\n" +"{a2}" + #: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "Couldn't paste non-POU object." -#: ../ProjectController.py:1636 +#: ../ProjectController.py:1717 msgid "Couldn't start PLC !\n" msgstr "Couldn't start PLC !\n" -#: ../ProjectController.py:1644 +#: ../ProjectController.py:1725 msgid "Couldn't stop PLC !\n" msgstr "Couldn't stop PLC !\n" @@ -1162,43 +1307,43 @@ msgid "Create HMI" msgstr "Create HMI" -#: ../dialogs/PouDialog.py:54 +#: ../dialogs/PouDialog.py:48 msgid "Create a new POU" msgstr "Create a new POU" -#: ../dialogs/PouActionDialog.py:45 +#: ../dialogs/PouActionDialog.py:42 msgid "Create a new action" msgstr "Create a new action" -#: ../IDEFrame.py:166 +#: ../IDEFrame.py:313 msgid "Create a new action block" msgstr "Create a new action block" -#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +#: ../IDEFrame.py:262 ../IDEFrame.py:292 ../IDEFrame.py:325 msgid "Create a new block" msgstr "Create a new block" -#: ../IDEFrame.py:139 +#: ../IDEFrame.py:286 msgid "Create a new branch" msgstr "Create a new branch" -#: ../IDEFrame.py:133 +#: ../IDEFrame.py:280 msgid "Create a new coil" msgstr "Create a new coil" -#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +#: ../IDEFrame.py:256 ../IDEFrame.py:271 ../IDEFrame.py:301 msgid "Create a new comment" msgstr "Create a new comment" -#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +#: ../IDEFrame.py:265 ../IDEFrame.py:295 ../IDEFrame.py:328 msgid "Create a new connection" msgstr "Create a new connection" -#: ../IDEFrame.py:136 ../IDEFrame.py:187 +#: ../IDEFrame.py:283 ../IDEFrame.py:334 msgid "Create a new contact" msgstr "Create a new contact" -#: ../IDEFrame.py:169 +#: ../IDEFrame.py:316 msgid "Create a new divergence" msgstr "Create a new divergence" @@ -1206,43 +1351,55 @@ msgid "Create a new divergence or convergence" msgstr "Create a new divergence or convergence" -#: ../IDEFrame.py:157 +#: ../IDEFrame.py:304 msgid "Create a new initial step" msgstr "Create a new initial step" -#: ../IDEFrame.py:172 +#: ../IDEFrame.py:319 msgid "Create a new jump" msgstr "Create a new jump" -#: ../IDEFrame.py:127 ../IDEFrame.py:184 +#: ../IDEFrame.py:274 ../IDEFrame.py:331 msgid "Create a new power rail" msgstr "Create a new power rail" -#: ../IDEFrame.py:130 +#: ../IDEFrame.py:277 msgid "Create a new rung" msgstr "Create a new rung" -#: ../IDEFrame.py:160 +#: ../IDEFrame.py:307 msgid "Create a new step" msgstr "Create a new step" -#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +#: ../dialogs/PouTransitionDialog.py:45 ../IDEFrame.py:310 msgid "Create a new transition" msgstr "Create a new transition" -#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +#: ../IDEFrame.py:259 ../IDEFrame.py:289 ../IDEFrame.py:322 msgid "Create a new variable" msgstr "Create a new variable" +#: ../etherlab/etherlab.py:183 +msgid "Creating new PDO" +msgstr "Creating new PDO" + #: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "Credits" -#: ../Beremiz_service.py:424 +#: ../runtime/WampClient.py:400 +msgid "Current status" +msgstr "Current status" + +#: ../Beremiz_service.py:437 msgid "Current working directory :" msgstr "Current working directory :" -#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +#: ../runtime/WampClient.py:161 +msgid "Custom protocol options failed :" +msgstr "Custom protocol options failed :" + +#: ../editors/Viewer.py:697 ../IDEFrame.py:373 ../IDEFrame.py:427 msgid "Cut" msgstr "Cut" @@ -1291,11 +1448,11 @@ msgid "Date subtraction" msgstr "Date subtraction" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:57 msgid "Days:" msgstr "Days:" -#: ../ProjectController.py:1729 +#: ../ProjectController.py:1809 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "Debug does not match PLC - stop/transfert/start to re-enable\n" @@ -1303,42 +1460,51 @@ msgid "Debug instance" msgstr "Debug instance" -#: ../editors/Viewer.py:490 +#: ../editors/Viewer.py:493 #, python-format msgid "Debug: %s" msgstr "Debug: %s" -#: ../ProjectController.py:1471 +#: ../ProjectController.py:1548 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "Debug: Unknown variable '%s'\n" -#: ../ProjectController.py:1469 +#: ../ProjectController.py:1545 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "Debug: Unsupported type to debug '%s'\n" -#: ../IDEFrame.py:660 +#: ../IDEFrame.py:666 msgid "Debugger" msgstr "Debugger" -#: ../ProjectController.py:1726 +#: ../ProjectController.py:1805 msgid "Debugger ready\n" msgstr "Debugger ready\n" -#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Default Size" +msgstr "Default Size" + +#: ../etherlab/EthercatCFileGenerator.py:174 +#, python-format +msgid "Definition conflict for location \"%s\"" +msgstr "Definition conflict for location \"%s\"" + +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:673 ../IDEFrame.py:2010 msgid "Delete" msgstr "Delete" -#: ../editors/Viewer.py:610 +#: ../editors/Viewer.py:613 msgid "Delete Divergence Branch" msgstr "Delete Divergence Branch" -#: ../editors/FileManagementPanel.py:157 +#: ../etherlab/ConfigEditor.py:1261 ../editors/FileManagementPanel.py:156 msgid "Delete File" msgstr "Delete File" -#: ../editors/Viewer.py:597 +#: ../editors/Viewer.py:600 msgid "Delete Wire Segment" msgstr "Delete Wire Segment" @@ -1354,11 +1520,12 @@ msgid "Derivation Type:" msgstr "Derivation Type:" -#: ../editors/CodeFileEditor.py:735 +#: ../etherlab/ConfigEditor.py:346 ../etherlab/ConfigEditor.py:465 +#: ../editors/CodeFileEditor.py:754 msgid "Description" msgstr "Description" -#: ../controls/VariablePanel.py:463 +#: ../controls/VariablePanel.py:465 msgid "Description:" msgstr "Description:" @@ -1370,7 +1537,7 @@ msgid "Direction" msgstr "Direction" -#: ../dialogs/BrowseLocationsDialog.py:102 +#: ../dialogs/BrowseLocationsDialog.py:101 msgid "Direction:" msgstr "Direction:" @@ -1378,19 +1545,19 @@ msgid "Directly" msgstr "Directly" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1938 msgid "Disconnect" msgstr "Disconnect" -#: ../ProjectController.py:1856 +#: ../ProjectController.py:1939 msgid "Disconnect from PLC" msgstr "Disconnect from PLC" -#: ../ProjectController.py:1401 +#: ../runtime/PlcStatus.py:14 msgid "Disconnected" msgstr "Disconnected" -#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +#: ../editors/Viewer.py:657 ../editors/Viewer.py:2438 msgid "Divergence" msgstr "Divergence" @@ -1398,7 +1565,7 @@ msgid "Division" msgstr "Division" -#: ../editors/FileManagementPanel.py:156 +#: ../etherlab/ConfigEditor.py:1260 ../editors/FileManagementPanel.py:155 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "Do you really want to delete the file '%s'?" @@ -1411,15 +1578,31 @@ msgid "Done" msgstr "Done" +#: ../runtime/WampClient.py:384 +msgid "Download" +msgstr "Download" + #: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "Duration" +#: ../bacnet/bacnet.py:437 +msgid "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*" +msgstr "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*" + #: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "EDS files (*.eds)|*.eds|All files|*.*" -#: ../editors/Viewer.py:668 +#: ../etherlab/ConfigEditor.py:1342 +msgid "ESI Files Database management" +msgstr "ESI Files Database management" + +#: ../etherlab/ConfigEditor.py:1109 +msgid "ESI Files:" +msgstr "ESI Files:" + +#: ../editors/Viewer.py:671 msgid "Edit Block" msgstr "Edit Block" @@ -1431,7 +1614,7 @@ msgid "Edit Contact Values" msgstr "Edit Contact Values" -#: ../dialogs/DurationEditorDialog.py:62 +#: ../dialogs/DurationEditorDialog.py:54 msgid "Edit Duration" msgstr "Edit Duration" @@ -1451,11 +1634,11 @@ msgid "Edit array type properties" msgstr "Edit array type properties" -#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +#: ../dialogs/CommentEditDialog.py:53 msgid "Edit comment" msgstr "Edit comment" -#: ../editors/FileManagementPanel.py:69 +#: ../editors/FileManagementPanel.py:68 msgid "Edit file" msgstr "Edit file" @@ -1463,11 +1646,11 @@ msgid "Edit item" msgstr "Edit item" -#: ../editors/Viewer.py:3059 +#: ../editors/Viewer.py:3058 msgid "Edit jump target" msgstr "Edit jump target" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1956 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "Edit raw IEC code added to code generated by PLCGenerator" @@ -1479,11 +1662,11 @@ msgid "Edit transition" msgstr "Edit transition" -#: ../IDEFrame.py:632 +#: ../IDEFrame.py:638 msgid "Editor ToolBar" msgstr "Editor ToolBar" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1355 msgid "Editor selection" msgstr "Editor selection" @@ -1491,7 +1674,7 @@ msgid "Elements :" msgstr "Elements :" -#: ../ProjectController.py:1399 +#: ../runtime/PlcStatus.py:15 msgid "Empty" msgstr "Empty" @@ -1499,18 +1682,43 @@ msgid "Empty dimension isn't allowed." msgstr "Empty dimension isn't allowed." -#: ../Beremiz_service.py:341 +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Enable" +msgstr "Enable" + +#: ../runtime/WampClient.py:410 +msgid "Enable WAMP connection" +msgstr "Enable WAMP connection" + +#: ../Beremiz_service.py:354 msgid "Enter a name " msgstr "Enter a name " -#: ../Beremiz_service.py:326 +#: ../Beremiz_service.py:339 msgid "Enter a port number " msgstr "Enter a port number " -#: ../Beremiz_service.py:317 +#: ../etherlab/EtherCATManagementEditor.py:627 +msgid "Enter hex or dec value (if enter dec value, it automatically conversed hex value)" +msgstr "Enter hex or dec value (if enter dec value, it automatically conversed hex value)" + +#: ../etherlab/EtherCATManagementEditor.py:1964 +msgid "Enter hex(0xnnnn) or dec(n) value" +msgstr "Enter hex(0xnnnn) or dec(n) value" + +#: ../Beremiz_service.py:330 msgid "Enter the IP of the interface to bind" msgstr "Enter the IP of the interface to bind" +#: ../etherlab/ConfigEditor.py:502 +msgid "Entry can't be write through SDO" +msgstr "Entry can't be write through SDO" + +#: ../etherlab/EthercatCFileGenerator.py:569 +#, python-brace-format +msgid "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}" +msgstr "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}" + #: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "Enumerated" @@ -1521,42 +1729,45 @@ #: ../dialogs/ForceVariableDialog.py:213 #: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 -#: ../dialogs/DurationEditorDialog.py:124 -#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114 -#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80 +#: ../dialogs/DurationEditorDialog.py:125 +#: ../dialogs/DurationEditorDialog.py:172 ../dialogs/PouTransitionDialog.py:113 +#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78 #: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58 -#: ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseLocationsDialog.py:228 #: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112 -#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 -#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 -#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 -#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 -#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 -#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 -#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 -#: ../ProjectController.py:391 ../ProjectController.py:531 -#: ../ProjectController.py:538 ../controls/FolderTree.py:222 -#: ../controls/ProjectPropertiesPanel.py:306 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../dialogs/PouDialog.py:178 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../etherlab/ConfigEditor.py:458 ../etherlab/ConfigEditor.py:510 +#: ../etherlab/ConfigEditor.py:981 ../etherlab/ConfigEditor.py:1047 +#: ../etherlab/ConfigEditor.py:1246 ../etherlab/ConfigEditor.py:1314 +#: ../etherlab/EthercatMaster.py:463 ../editors/ResourceEditor.py:468 +#: ../editors/Viewer.py:467 ../editors/LDViewer.py:677 +#: ../editors/LDViewer.py:893 ../editors/LDViewer.py:897 +#: ../editors/DataTypeEditor.py:566 ../editors/DataTypeEditor.py:571 +#: ../editors/DataTypeEditor.py:590 ../editors/DataTypeEditor.py:759 +#: ../editors/DataTypeEditor.py:766 ../editors/TextViewer.py:390 +#: ../editors/CodeFileEditor.py:779 ../ProjectController.py:404 +#: ../ProjectController.py:548 ../ProjectController.py:557 +#: ../controls/FolderTree.py:222 ../controls/ProjectPropertiesPanel.py:308 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:163 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 -#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 -#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 -#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 -#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +#: ../controls/VariablePanel.py:430 ../controls/VariablePanel.py:784 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1049 ../IDEFrame.py:1667 +#: ../IDEFrame.py:1708 ../IDEFrame.py:1713 ../IDEFrame.py:1727 +#: ../IDEFrame.py:1732 ../Beremiz_service.py:234 msgid "Error" msgstr "Error" -#: ../ProjectController.py:811 +#: ../ProjectController.py:848 msgid "Error : At least one configuration and one resource must be declared in PLC !\n" msgstr "Error : At least one configuration and one resource must be declared in PLC !\n" -#: ../ProjectController.py:803 +#: ../ProjectController.py:838 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "Error : IEC to C compiler returned %d\n" -#: ../ProjectController.py:731 +#: ../ProjectController.py:762 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1570,7 +1781,17 @@ msgid "Error while saving \"%s\"\n" msgstr "Error while saving \"%s\"\n" -#: ../canfestival/canfestival.py:179 +#: ../bacnet/bacnet.py:581 +#, python-brace-format +msgid "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n" +msgstr "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n" + +#: ../bacnet/bacnet.py:573 +#, python-brace-format +msgid "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n" +msgstr "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n" + +#: ../canfestival/canfestival.py:179 ../bacnet/bacnet.py:444 msgid "Error: Export slave failed\n" msgstr "Error: Export slave failed\n" @@ -1587,7 +1808,23 @@ msgid "Error: No PLC built\n" msgstr "Error: No PLC built\n" -#: ../ProjectController.py:1708 +#: ../etherlab/ConfigEditor.py:269 +msgid "EtherCAT Management" +msgstr "EtherCAT Management" + +#: ../features.py:20 +msgid "EtherCAT master" +msgstr "EtherCAT master" + +#: ../etherlab/EthercatMaster.py:302 +msgid "Ethercat Slave Type" +msgstr "Ethercat Slave Type" + +#: ../etherlab/ConfigEditor.py:267 +msgid "Ethercat node" +msgstr "Ethercat node" + +#: ../ProjectController.py:1791 #, python-format msgid "Exception while connecting %s!\n" msgstr "Exception while connecting %s!\n" @@ -1596,11 +1833,11 @@ msgid "Execution Control:" msgstr "Execution Control:" -#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +#: ../dialogs/FBDVariableDialog.py:85 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "Execution Order:" -#: ../features.py:36 +#: ../features.py:25 msgid "Experimental web based HMI" msgstr "Experimental web based HMI" @@ -1612,44 +1849,48 @@ msgid "Exponentiation" msgstr "Exponentiation" +#: ../bacnet/bacnet.py:156 +msgid "Export BACnet slave to EDE file" +msgstr "Export BACnet slave to EDE file" + #: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "Export CanOpen slave to EDS file" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 msgid "Export graph values to clipboard" msgstr "Export graph values to clipboard" -#: ../canfestival/canfestival.py:185 +#: ../canfestival/canfestival.py:185 ../bacnet/bacnet.py:155 msgid "Export slave" msgstr "Export slave" -#: ../dialogs/FBDVariableDialog.py:94 +#: ../dialogs/FBDVariableDialog.py:95 msgid "Expression:" msgstr "Expression:" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid "External" msgstr "External" -#: ../ProjectController.py:826 +#: ../ProjectController.py:866 msgid "Extracting Located Variables...\n" msgstr "Extracting Located Variables...\n" #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "FBD" msgstr "FBD" -#: ../ProjectController.py:1773 +#: ../ProjectController.py:1855 msgid "Failed : Must build before transfer.\n" msgstr "Failed : Must build before transfer.\n" -#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:559 msgid "Falling Edge" msgstr "Falling Edge" -#: ../ProjectController.py:1098 +#: ../ProjectController.py:1145 msgid "Fatal : cannot get builder.\n" msgstr "Fatal : cannot get builder.\n" @@ -1658,12 +1899,12 @@ msgid "Fetching %s" msgstr "Fetching %s" -#: ../dialogs/DurationEditorDialog.py:167 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Field %s hasn't a valid value!" msgstr "Field %s hasn't a valid value!" -#: ../dialogs/DurationEditorDialog.py:169 +#: ../dialogs/DurationEditorDialog.py:171 #, python-format msgid "Fields %s haven't a valid value!" msgstr "Fields %s haven't a valid value!" @@ -1673,16 +1914,20 @@ msgid "File '%s' already exists!" msgstr "File '%s' already exists!" +#: ../runtime/WampClient.py:407 +msgid "File containing secret for that ID" +msgstr "File containing secret for that ID" + #: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 -#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:380 msgid "Find" msgstr "Find" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:382 msgid "Find Next" msgstr "Find Next" -#: ../IDEFrame.py:381 +#: ../IDEFrame.py:384 msgid "Find Previous" msgstr "Find Previous" @@ -1694,7 +1939,7 @@ msgid "Find:" msgstr "Find:" -#: ../editors/Viewer.py:1633 +#: ../editors/Viewer.py:1635 msgid "Force value" msgstr "Force value" @@ -1702,9 +1947,9 @@ msgid "Forcing Variable Value" msgstr "Forcing Variable Value" -#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 -#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 -#: ../dialogs/PouDialog.py:125 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:103 +#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:160 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "Form isn't complete. %s must be filled!" @@ -1722,20 +1967,24 @@ msgid "Forward" msgstr "Forward" -#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +#: ../IDEFrame.py:455 +msgid "Full screen" +msgstr "Full screen" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1797 msgid "Function" msgstr "Function" -#: ../IDEFrame.py:354 +#: ../IDEFrame.py:357 msgid "Function &Block" msgstr "Function &Block" -#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 -#: ../IDEFrame.py:1972 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1796 +#: ../IDEFrame.py:1989 msgid "Function Block" msgstr "Function Block" -#: ../controls/VariablePanel.py:868 +#: ../controls/VariablePanel.py:879 msgid "Function Block Types" msgstr "Function Block Types" @@ -1760,19 +2009,19 @@ msgid "Generate Program" msgstr "Generate Program" -#: ../ProjectController.py:722 +#: ../ProjectController.py:750 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid "Global" msgstr "Global" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 msgid "Go to current value" msgstr "Go to current value" -#: ../controls/ProjectPropertiesPanel.py:189 +#: ../controls/ProjectPropertiesPanel.py:192 msgid "Graphics" msgstr "Graphics" @@ -1784,32 +2033,36 @@ msgid "Greater than or equal to" msgstr "Greater than or equal to" -#: ../controls/ProjectPropertiesPanel.py:149 +#: ../controls/ProjectPropertiesPanel.py:152 msgid "Grid Resolution:" msgstr "Grid Resolution:" -#: ../runtime/NevowServer.py:192 +#: ../runtime/NevowServer.py:313 msgid "HTTP interface port :" msgstr "HTTP interface port :" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:138 msgid "Height:" msgstr "Height:" -#: ../editors/FileManagementPanel.py:89 +#: ../editors/FileManagementPanel.py:88 msgid "Home Directory:" msgstr "Home Directory:" -#: ../controls/ProjectPropertiesPanel.py:165 +#: ../controls/ProjectPropertiesPanel.py:168 msgid "Horizontal:" msgstr "Horizontal:" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:58 msgid "Hours:" msgstr "Hours:" +#: ../runtime/WampClient.py:404 +msgid "ID" +msgstr "ID" + #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 +#: ../dialogs/PouDialog.py:128 msgid "IL" msgstr "IL" @@ -1817,52 +2070,64 @@ msgid "IP" msgstr "IP" -#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +#: ../Beremiz_service.py:331 ../Beremiz_service.py:333 msgid "IP is not valid!" msgstr "IP is not valid!" +#: ../etherlab/ConfigEditor.py:1387 +msgid "Import ESI file" +msgstr "Import ESI file" + #: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "Import SVG" -#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 -#: ../controls/VariablePanel.py:89 +#: ../etherlab/ConfigEditor.py:1352 +msgid "Import file to ESI files database" +msgstr "Import file to ESI files database" + +#: ../dialogs/FBDVariableDialog.py:64 ../editors/Viewer.py:1664 +#: ../controls/VariablePanel.py:86 msgid "InOut" msgstr "InOut" -#: ../PLCGenerator.py:1040 +#: ../PLCGenerator.py:1089 #, python-brace-format msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." msgstr "InOut variable {a1} in block {a2} in POU {a3} must be connected." -#: ../editors/Viewer.py:473 +#: ../editors/Viewer.py:484 msgid "Inactive" msgstr "Inactive" -#: ../controls/VariablePanel.py:300 +#: ../controls/VariablePanel.py:299 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "Incompatible data types between \"{a1}\" and \"{a2}\"" -#: ../controls/VariablePanel.py:306 +#: ../controls/VariablePanel.py:305 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "Incompatible size of data between \"%s\" and \"BOOL\"" -#: ../controls/VariablePanel.py:310 +#: ../controls/VariablePanel.py:309 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "Incompatible size of data between \"{a1}\" and \"{a2}\"" +#: ../etherlab/ConfigEditor.py:48 ../etherlab/ConfigEditor.py:465 +msgid "Index" +msgstr "Index" + #: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "Indicator" -#: ../editors/CodeFileEditor.py:734 +#: ../editors/CodeFileEditor.py:753 msgid "Initial" msgstr "Initial" -#: ../editors/Viewer.py:650 +#: ../editors/Viewer.py:653 msgid "Initial Step" msgstr "Initial Step" @@ -1875,6 +2140,14 @@ msgid "Initial Value:" msgstr "Initial Value:" +#: ../etherlab/EthercatCIA402Slave.py:119 +msgid "Initiate Drag'n drop of Axis ref located variable" +msgstr "Initiate Drag'n drop of Axis ref located variable" + +#: ../etherlab/EthercatCIA402Slave.py:126 +msgid "Initiate Drag'n drop of Network position located variable" +msgstr "Initiate Drag'n drop of Network position located variable" + #: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "Inkscape" @@ -1883,11 +2156,11 @@ msgid "Inline" msgstr "Inline" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:63 #: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 -#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../editors/Viewer.py:1662 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Input" msgstr "Input" @@ -1904,11 +2177,11 @@ msgid "Instance with id %d doesn't exist!" msgstr "Instance with id %d doesn't exist!" -#: ../editors/ResourceEditor.py:279 +#: ../editors/ResourceEditor.py:277 msgid "Instances:" msgstr "Instances:" -#: ../controls/VariablePanel.py:88 +#: ../controls/VariablePanel.py:85 msgid "Interface" msgstr "Interface" @@ -1920,7 +2193,7 @@ msgid "Interval" msgstr "Interval" -#: ../controls/ProjectPropertiesPanel.py:304 +#: ../controls/ProjectPropertiesPanel.py:306 msgid "" "Invalid URL!\n" "Please enter correct URL address." @@ -1942,14 +2215,26 @@ msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:129 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "Invalid value \"%s\" for debug variable" -#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#: ../etherlab/ConfigEditor.py:418 ../etherlab/ConfigEditor.py:421 +#: ../etherlab/ConfigEditor.py:452 +#, python-format +msgid "Invalid value \"%s\" for process variable" +msgstr "Invalid value \"%s\" for process variable" + +#: ../etherlab/ConfigEditor.py:480 ../etherlab/ConfigEditor.py:483 +#: ../etherlab/ConfigEditor.py:504 +#, python-format +msgid "Invalid value \"%s\" for startup command" +msgstr "Invalid value \"%s\" for startup command" + +#: ../controls/VariablePanel.py:278 ../controls/VariablePanel.py:281 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "Invalid value \"%s\" for variable grid element" @@ -1964,7 +2249,12 @@ msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "Invalid value \"{a1}\" for \"{a2}\" variable!" -#: ../dialogs/DurationEditorDialog.py:124 +#: ../etherlab/CommonEtherCATFunction.py:31 +#, python-format +msgid "Invalid value for HexDecValue \"%s\"" +msgstr "Invalid value for HexDecValue \"%s\"" + +#: ../dialogs/DurationEditorDialog.py:125 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1976,12 +2266,12 @@ msgid "Is connection secure?" msgstr "Is connection secure?" -#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +#: ../editors/Viewer.py:658 ../editors/Viewer.py:2427 msgid "Jump" msgstr "Jump" #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "LD" msgstr "LD" @@ -1990,33 +2280,33 @@ msgid "Ladder element with id %d is on more than one rung." msgstr "Ladder element with id %d is on more than one rung." -#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 -#: ../dialogs/PouDialog.py:113 +#: ../dialogs/PouTransitionDialog.py:92 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:148 msgid "Language" msgstr "Language" -#: ../controls/ProjectPropertiesPanel.py:206 +#: ../controls/ProjectPropertiesPanel.py:208 msgid "Language (optional):" msgstr "Language (optional):" -#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 -#: ../dialogs/PouDialog.py:81 +#: ../dialogs/PouTransitionDialog.py:66 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:79 msgid "Language:" msgstr "Language:" -#: ../ProjectController.py:1779 +#: ../ProjectController.py:1861 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "Latest build already matches current target. Transfering anyway...\n" -#: ../Beremiz_service.py:281 +#: ../Beremiz_service.py:294 msgid "Launch WX GUI inspector" msgstr "Launch WX GUI inspector" -#: ../Beremiz_service.py:280 +#: ../Beremiz_service.py:293 msgid "Launch a live Python shell" msgstr "Launch a live Python shell" -#: ../editors/Viewer.py:580 +#: ../editors/Viewer.py:583 msgid "Left" msgstr "Left" @@ -2036,7 +2326,7 @@ msgid "Less than or equal to" msgstr "Less than or equal to" -#: ../IDEFrame.py:652 +#: ../IDEFrame.py:658 msgid "Library" msgstr "Library" @@ -2052,7 +2342,7 @@ msgid "Linking :\n" msgstr "Linking :\n" -#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:87 msgid "Local" msgstr "Local" @@ -2060,7 +2350,7 @@ msgid "Local entries" msgstr "Local entries" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1767 msgid "Local service discovery failed!\n" msgstr "Local service discovery failed!\n" @@ -2068,28 +2358,44 @@ msgid "Location" msgstr "Location" -#: ../dialogs/BrowseLocationsDialog.py:79 +#: ../dialogs/BrowseLocationsDialog.py:78 msgid "Locations available:" msgstr "Locations available:" +#: ../runtime/NevowServer.py:175 +msgid "Log message level" +msgstr "Log message level" + #: ../plcopen/iec_std.csv:25 msgid "Logarithm to base 10" msgstr "Logarithm to base 10" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:103 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "MDNS resolution failure for '%s'\n" +#: ../etherlab/ConfigEditor.py:67 +msgid "Manufacturer Specific" +msgstr "Manufacturer Specific" + #: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "Map Variable" -#: ../features.py:31 +#: ../features.py:19 +msgid "Map located variables over Bacnet" +msgstr "Map located variables over Bacnet" + +#: ../features.py:18 msgid "Map located variables over CANopen" msgstr "Map located variables over CANopen" -#: ../features.py:32 +#: ../features.py:20 +msgid "Map located variables over EtherCAT" +msgstr "Map located variables over EtherCAT" + +#: ../features.py:21 msgid "Map located variables over Modbus" msgstr "Map located variables over Modbus" @@ -2097,11 +2403,27 @@ msgid "Master" msgstr "Master" +#: ../etherlab/ConfigEditor.py:613 +msgid "Master State" +msgstr "Master State" + #: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "Max count ({a1}) reached for this confnode of type {a2} " +#: ../etherlab/etherlab.py:173 +msgid "Max entries by PDO" +msgstr "Max entries by PDO" + +#: ../etherlab/etherlab.py:176 +msgid "" +"Maximal number of entries mapped in a PDO\n" +"including empty entries used for PDO alignment" +msgstr "" +"Maximal number of entries mapped in a PDO\n" +"including empty entries used for PDO alignment" + #: ../plcopen/iec_std.csv:71 msgid "Maximum" msgstr "Maximum" @@ -2112,26 +2434,34 @@ #: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 #: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Memory" msgstr "Memory" -#: ../IDEFrame.py:617 +#: ../IDEFrame.py:623 msgid "Menu ToolBar" msgstr "Menu ToolBar" -#: ../dialogs/DurationEditorDialog.py:51 +#: ../runtime/NevowServer.py:176 +msgid "Message text" +msgstr "Message text" + +#: ../dialogs/DurationEditorDialog.py:62 msgid "Microseconds:" msgstr "Microseconds:" -#: ../editors/Viewer.py:585 +#: ../editors/Viewer.py:588 msgid "Middle" msgstr "Middle" -#: ../dialogs/DurationEditorDialog.py:50 +#: ../dialogs/DurationEditorDialog.py:61 msgid "Milliseconds:" msgstr "Milliseconds:" +#: ../etherlab/etherlab.py:167 +msgid "Minimal size in bits between 2 pdo entries" +msgstr "Minimal size in bits between 2 pdo entries" + #: ../plcopen/iec_std.csv:72 msgid "Minimum" msgstr "Minimum" @@ -2140,15 +2470,15 @@ msgid "Minimum:" msgstr "Minimum:" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:59 msgid "Minutes:" msgstr "Minutes:" -#: ../controls/ProjectPropertiesPanel.py:231 +#: ../etherlab/etherlab.py:238 ../controls/ProjectPropertiesPanel.py:233 msgid "Miscellaneous" msgstr "Miscellaneous" -#: ../features.py:32 +#: ../features.py:21 msgid "Modbus support" msgstr "Modbus support" @@ -2156,7 +2486,20 @@ msgid "Modifier:" msgstr "Modifier:" -#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#: ../etherlab/ConfigEditor.py:1313 +#, python-format +msgid "Module %s must be an integer!" +msgstr "Module %s must be an integer!" + +#: ../etherlab/ConfigEditor.py:1376 +msgid "Modules Library" +msgstr "Modules Library" + +#: ../etherlab/ConfigEditor.py:1145 +msgid "Modules library:" +msgstr "Modules library:" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1318 #, python-brace-format msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" @@ -2181,23 +2524,31 @@ msgid "Move element up" msgstr "Move element up" -#: ../editors/ResourceEditor.py:286 +#: ../editors/ResourceEditor.py:284 msgid "Move instance down" msgstr "Move instance down" -#: ../editors/ResourceEditor.py:285 +#: ../editors/ResourceEditor.py:283 msgid "Move instance up" msgstr "Move instance up" -#: ../editors/ResourceEditor.py:255 +#: ../etherlab/ConfigEditor.py:655 +msgid "Move process variable down" +msgstr "Move process variable down" + +#: ../etherlab/ConfigEditor.py:654 +msgid "Move process variable up" +msgstr "Move process variable up" + +#: ../editors/ResourceEditor.py:253 msgid "Move task down" msgstr "Move task down" -#: ../editors/ResourceEditor.py:254 +#: ../editors/ResourceEditor.py:252 msgid "Move task up" msgstr "Move task up" -#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +#: ../IDEFrame.py:253 ../IDEFrame.py:268 ../IDEFrame.py:298 ../IDEFrame.py:339 msgid "Move the view" msgstr "Move the view" @@ -2205,14 +2556,28 @@ msgid "Move up" msgstr "Move up" -#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +#: ../bacnet/BacnetSlaveEditor.py:814 ../editors/CodeFileEditor.py:675 +#: ../controls/VariablePanel.py:486 msgid "Move variable down" msgstr "Move variable down" -#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +#: ../bacnet/BacnetSlaveEditor.py:813 ../editors/CodeFileEditor.py:674 +#: ../controls/VariablePanel.py:485 msgid "Move variable up" msgstr "Move variable up" +#: ../bacnet/BacnetSlaveEditor.py:941 +msgid "Multi-State Input Objects" +msgstr "Multi-State Input Objects" + +#: ../bacnet/BacnetSlaveEditor.py:940 +msgid "Multi-State Output Objects" +msgstr "Multi-State Output Objects" + +#: ../bacnet/BacnetSlaveEditor.py:939 +msgid "Multi-State Value Objects" +msgstr "Multi-State Value Objects" + #: ../plcopen/iec_std.csv:74 msgid "Multiplexer (select 1 of N)" msgstr "Multiplexer (select 1 of N)" @@ -2221,7 +2586,7 @@ msgid "Multiplication" msgstr "Multiplication" -#: ../editors/FileManagementPanel.py:87 +#: ../editors/FileManagementPanel.py:86 msgid "My Computer:" msgstr "My Computer:" @@ -2229,13 +2594,15 @@ msgid "NAME" msgstr "NAME" -#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 -#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../etherlab/EtherCATManagementEditor.py:37 ../etherlab/ConfigEditor.py:48 +#: ../etherlab/ConfigEditor.py:343 ../etherlab/ConfigEditor.py:1167 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:94 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:751 #: ../controls/VariablePanel.py:59 msgid "Name" msgstr "Name" -#: ../Beremiz_service.py:342 +#: ../Beremiz_service.py:355 msgid "Name must not be null!" msgstr "Name must not be null!" @@ -2248,15 +2615,19 @@ msgid "Natural logarithm" msgstr "Natural logarithm" -#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:557 msgid "Negated" msgstr "Negated" -#: ../Beremiz_service.py:610 +#: ../etherlab/ConfigEditor.py:612 +msgid "Network" +msgstr "Network" + +#: ../Beremiz_service.py:620 msgid "Nevow Web service failed. " msgstr "Nevow Web service failed. " -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:596 msgid "Nevow/Athena import failed :" msgstr "Nevow/Athena import failed :" @@ -2269,20 +2640,29 @@ msgid "New item" msgstr "New item" -#: ../editors/Viewer.py:553 +#: ../editors/Viewer.py:556 msgid "No Modifier" msgstr "No Modifier" -#: ../ProjectController.py:1808 +#: ../ProjectController.py:1891 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "No PLC to transfer (did build succeed ?)\n" -#: ../PLCGenerator.py:1678 +#: ../etherlab/EthercatCFileGenerator.py:504 +#, python-format +msgid "No Sync manager defined for %s!" +msgstr "No Sync manager defined for %s!" + +#: ../PLCGenerator.py:1727 #, python-format msgid "No body defined in \"%s\" POU" msgstr "No body defined in \"%s\" POU" -#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#: ../etherlab/CommonEtherCATFunction.py:1581 +msgid "No connected slaves" +msgstr "No connected slaves" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1330 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" @@ -2300,7 +2680,17 @@ msgid "No informations found for \"%s\" block" msgstr "No informations found for \"%s\" block" -#: ../PLCGenerator.py:1232 +#: ../etherlab/EthercatCFileGenerator.py:224 +#, python-format +msgid "No informations found for device %s!" +msgstr "No informations found for device %s!" + +#: ../etherlab/EthercatCFileGenerator.py:515 +#, python-format +msgid "No more free PDO index available for %s!" +msgstr "No more free PDO index available for %s!" + +#: ../PLCGenerator.py:1281 #, python-brace-format msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken" msgstr "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken" @@ -2309,11 +2699,21 @@ msgid "No search results available." msgstr "No search results available." +#: ../etherlab/ConfigEditor.py:1029 +#, python-format +msgid "No slave defined at position %d!" +msgstr "No slave defined at position %d!" + #: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "No such SVG file: %s\n" +#: ../etherlab/ConfigEditor.py:1245 +#, python-format +msgid "No such XML file: %s\n" +msgstr "No such XML file: %s\n" + #: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" @@ -2324,15 +2724,33 @@ msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" +#: ../etherlab/EthercatCFileGenerator.py:438 +#, python-format +msgid "No sync manager available for %s pdo!" +msgstr "No sync manager available for %s pdo!" + #: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "No valid value selected!" -#: ../PLCGenerator.py:1676 +#: ../PLCGenerator.py:1725 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "No variable defined in \"%s\" POU" +#: ../etherlab/ConfigEditor.py:606 +#, python-format +msgid "Node Position: %d" +msgstr "Node Position: %d" + +#: ../etherlab/ConfigEditor.py:697 +msgid "Node filter:" +msgstr "Node filter:" + +#: ../etherlab/ConfigEditor.py:717 +msgid "Nodes variables filter:" +msgstr "Nodes variables filter:" + #: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" @@ -2355,6 +2773,10 @@ msgid "Not equal to" msgstr "Not equal to" +#: ../etherlab/EtherCATManagementEditor.py:361 +msgid "Now Uploading..." +msgstr "Now Uploading..." + #: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "Number of sequences:" @@ -2363,7 +2785,11 @@ msgid "Numerical" msgstr "Numerical" -#: ../editors/CodeFileEditor.py:736 +#: ../bacnet/BacnetSlaveEditor.py:808 +msgid "Object Properties:" +msgstr "Object Properties:" + +#: ../editors/CodeFileEditor.py:755 msgid "OnChange" msgstr "OnChange" @@ -2380,15 +2806,15 @@ msgid "Open Inkscape" msgstr "Open Inkscape" -#: ../version.py:86 +#: ../version.py:88 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime." msgstr "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime." -#: ../ProjectController.py:1879 +#: ../ProjectController.py:1962 msgid "Open a file explorer to manage project files" msgstr "Open a file explorer to manage project files" -#: ../wxglade_hmi/wxglade_hmi.py:161 +#: ../wxglade_hmi/wxglade_hmi.py:176 msgid "Open wxGlade" msgstr "Open wxGlade" @@ -2396,11 +2822,11 @@ msgid "Option" msgstr "Option" -#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:756 msgid "Options" msgstr "Options" -#: ../controls/ProjectPropertiesPanel.py:109 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Organization (optional):" msgstr "Organization (optional):" @@ -2408,14 +2834,19 @@ msgid "Other Profile" msgstr "Other Profile" -#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:65 #: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 -#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../editors/Viewer.py:1663 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Output" msgstr "Output" +#: ../etherlab/EthercatCFileGenerator.py:170 +#, python-brace-format +msgid "Output variables can't be defined with different locations ({a1} and {a2})" +msgstr "Output variables can't be defined with different locations ({a1} and {a2})" + #: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "PDO Receive" @@ -2424,26 +2855,39 @@ msgid "PDO Transmit" msgstr "PDO Transmit" +#: ../etherlab/etherlab.py:164 +msgid "PDO alignment" +msgstr "PDO alignment" + #: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "PLC :\n" -#: ../BeremizIDE.py:383 +#: ../BeremizIDE.py:379 msgid "PLC Log" msgstr "PLC Log" -#: ../ProjectController.py:1082 +#: ../ProjectController.py:1129 msgid "PLC code generation failed !\n" msgstr "PLC code generation failed !\n" -#: ../Beremiz_service.py:305 +#: ../etherlab/EtherCATManagementEditor.py:250 +msgid "PLC is Not Started" +msgstr "PLC is Not Started" + +#: ../Beremiz_service.py:318 msgid "PLC is empty or already started." msgstr "PLC is empty or already started." -#: ../Beremiz_service.py:312 +#: ../Beremiz_service.py:325 msgid "PLC is not started." msgstr "PLC is not started." +#: ../etherlab/EtherCATManagementEditor.py:2160 +#: ../etherlab/CommonEtherCATFunction.py:1589 +msgid "PLC not connected!" +msgstr "PLC not connected!" + #: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" @@ -2475,28 +2919,28 @@ msgid "PORT" msgstr "PORT" -#: ../dialogs/PouDialog.py:109 +#: ../dialogs/PouDialog.py:144 msgid "POU Name" msgstr "POU Name" -#: ../dialogs/PouDialog.py:66 +#: ../dialogs/PouDialog.py:64 msgid "POU Name:" msgstr "POU Name:" -#: ../dialogs/PouDialog.py:111 +#: ../dialogs/PouDialog.py:146 msgid "POU Type" msgstr "POU Type" -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouDialog.py:71 msgid "POU Type:" msgstr "POU Type:" -#: ../connectors/PYRO/__init__.py:52 +#: ../connectors/PYRO/__init__.py:53 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "PYRO connecting to URI : %s\n" -#: ../connectors/PYRO/__init__.py:68 +#: ../connectors/PYRO/__init__.py:69 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "PYRO using certificates in '%s' \n" @@ -2505,11 +2949,11 @@ msgid "Page Setup" msgstr "Page Setup" -#: ../controls/ProjectPropertiesPanel.py:124 +#: ../controls/ProjectPropertiesPanel.py:127 msgid "Page Size (optional):" msgstr "Page Size (optional):" -#: ../IDEFrame.py:2640 +#: ../IDEFrame.py:2660 #, python-format msgid "Page: %d" msgstr "Page: %d" @@ -2518,11 +2962,11 @@ msgid "Parent instance" msgstr "Parent instance" -#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +#: ../editors/Viewer.py:699 ../IDEFrame.py:377 ../IDEFrame.py:429 msgid "Paste" msgstr "Paste" -#: ../IDEFrame.py:1899 +#: ../IDEFrame.py:1916 msgid "Paste POU" msgstr "Paste POU" @@ -2534,7 +2978,11 @@ msgid "Pin number:" msgstr "Pin number:" -#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../runtime/NevowServer.py:163 +msgid "Platform" +msgstr "Platform" + +#: ../editors/Viewer.py:2791 ../editors/Viewer.py:3059 #: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "Please choose a target" @@ -2543,7 +2991,7 @@ msgid "Please enter a block name" msgstr "Please enter a block name" -#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +#: ../dialogs/CommentEditDialog.py:52 msgid "Please enter comment text" msgstr "Please enter comment text" @@ -2552,7 +3000,8 @@ msgid "Please enter step name" msgstr "Please enter step name" -#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +#: ../dialogs/SFCStepNameDialog.py:37 ../dialogs/PouNameDialog.py:37 +#: ../Beremiz_service.py:222 msgid "Please enter text" msgstr "Please enter text" @@ -2561,15 +3010,19 @@ msgid "Please enter value for a \"%s\" variable:" msgstr "Please enter value for a \"%s\" variable:" -#: ../Beremiz_service.py:327 +#: ../Beremiz_service.py:340 msgid "Port number must be 0 <= port <= 65535!" msgstr "Port number must be 0 <= port <= 65535!" -#: ../Beremiz_service.py:327 +#: ../Beremiz_service.py:340 msgid "Port number must be an integer!" msgstr "Port number must be an integer!" -#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +#: ../etherlab/ConfigEditor.py:47 ../etherlab/ConfigEditor.py:465 +msgid "Position" +msgstr "Position" + +#: ../editors/Viewer.py:636 ../editors/Viewer.py:2451 msgid "Power Rail" msgstr "Power Rail" @@ -2590,7 +3043,7 @@ msgid "Print" msgstr "Print" -#: ../IDEFrame.py:1110 +#: ../IDEFrame.py:1123 msgid "Print preview" msgstr "Print preview" @@ -2602,33 +3055,37 @@ msgid "Priority:" msgstr "Priority:" -#: ../runtime/PLCObject.py:518 +#: ../runtime/PLCObject.py:523 #, python-format msgid "Problem starting PLC : error %d" msgstr "Problem starting PLC : error %d" -#: ../dialogs/ProjectDialog.py:63 +#: ../etherlab/ConfigEditor.py:647 +msgid "Process variables mapped between nodes:" +msgstr "Process variables mapped between nodes:" + +#: ../dialogs/ProjectDialog.py:61 msgid "Product Name" msgstr "Product Name" -#: ../controls/ProjectPropertiesPanel.py:90 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Name (required):" msgstr "Product Name (required):" -#: ../controls/ProjectPropertiesPanel.py:92 +#: ../controls/ProjectPropertiesPanel.py:93 msgid "Product Release (optional):" msgstr "Product Release (optional):" -#: ../dialogs/ProjectDialog.py:64 +#: ../dialogs/ProjectDialog.py:62 msgid "Product Version" msgstr "Product Version" -#: ../controls/ProjectPropertiesPanel.py:91 +#: ../controls/ProjectPropertiesPanel.py:92 msgid "Product Version (required):" msgstr "Product Version (required):" -#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 -#: ../IDEFrame.py:1975 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1795 +#: ../IDEFrame.py:1992 msgid "Program" msgstr "Program" @@ -2644,7 +3101,7 @@ msgid "Programs can't be used by other POUs!" msgstr "Programs can't be used by other POUs!" -#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +#: ../controls/ProjectPropertiesPanel.py:95 ../IDEFrame.py:607 msgid "Project" msgstr "Project" @@ -2653,19 +3110,19 @@ msgid "Project '%s':" msgstr "Project '%s':" -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1961 msgid "Project Files" msgstr "Project Files" -#: ../dialogs/ProjectDialog.py:62 +#: ../dialogs/ProjectDialog.py:60 msgid "Project Name" msgstr "Project Name" -#: ../controls/ProjectPropertiesPanel.py:88 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Name (required):" msgstr "Project Name (required):" -#: ../controls/ProjectPropertiesPanel.py:89 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Project Version (optional):" msgstr "Project Version (optional):" @@ -2694,16 +3151,16 @@ msgid "Properties" msgstr "Properties" -#: ../Beremiz_service.py:427 +#: ../Beremiz_service.py:440 msgid "Publishing service on local network" msgstr "Publishing service on local network" -#: ../connectors/PYRO/__init__.py:126 +#: ../connectors/PYRO/__init__.py:127 #, python-format msgid "Pyro exception: %s\n" msgstr "Pyro exception: %s\n" -#: ../Beremiz_service.py:420 +#: ../Beremiz_service.py:433 msgid "Pyro port :" msgstr "Pyro port :" @@ -2711,7 +3168,7 @@ msgid "Python code" msgstr "Python code" -#: ../features.py:34 +#: ../features.py:23 msgid "Python file" msgstr "Python file" @@ -2719,19 +3176,23 @@ msgid "Qualifier" msgstr "Qualifier" -#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:296 msgid "Quit" msgstr "Quit" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224 msgid "Range:" msgstr "Range:" -#: ../ProjectController.py:1872 +#: ../ProjectController.py:1955 msgid "Raw IEC code" msgstr "Raw IEC code" -#: ../BeremizIDE.py:1083 +#: ../etherlab/ConfigEditor.py:344 +msgid "Read from (nodeid, index, subindex)" +msgstr "Read from (nodeid, index, subindex)" + +#: ../BeremizIDE.py:1080 #, python-format msgid "Really delete node '%s'?" msgstr "Really delete node '%s'?" @@ -2740,7 +3201,7 @@ msgid "Realm:" msgstr "Realm:" -#: ../IDEFrame.py:367 ../IDEFrame.py:424 +#: ../IDEFrame.py:370 ../IDEFrame.py:425 msgid "Redo" msgstr "Redo" @@ -2748,10 +3209,14 @@ msgid "Reference" msgstr "Reference" -#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:436 msgid "Refresh" msgstr "Refresh" +#: ../etherlab/EtherCATManagementEditor.py:1965 +msgid "Register Modify Dialog" +msgstr "Register Modify Dialog" + #: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "Regular expression" @@ -2760,7 +3225,7 @@ msgid "Regular expressions" msgstr "Regular expressions" -#: ../editors/Viewer.py:1636 +#: ../editors/Viewer.py:1638 msgid "Release value" msgstr "Release value" @@ -2768,16 +3233,16 @@ msgid "Remainder (modulo)" msgstr "Remainder (modulo)" -#: ../BeremizIDE.py:1084 +#: ../BeremizIDE.py:1081 #, python-format msgid "Remove %s node" msgstr "Remove %s node" -#: ../IDEFrame.py:2445 +#: ../IDEFrame.py:2463 msgid "Remove Datatype" msgstr "Remove Datatype" -#: ../IDEFrame.py:2450 +#: ../IDEFrame.py:2468 msgid "Remove Pou" msgstr "Remove Pou" @@ -2789,35 +3254,52 @@ msgid "Remove element" msgstr "Remove element" -#: ../editors/FileManagementPanel.py:66 +#: ../etherlab/ConfigEditor.py:1353 +msgid "Remove file from database" +msgstr "Remove file from database" + +#: ../editors/FileManagementPanel.py:65 msgid "Remove file from left folder" msgstr "Remove file from left folder" -#: ../editors/ResourceEditor.py:284 +#: ../etherlab/ConfigEditor.py:1389 +msgid "Remove file from library" +msgstr "Remove file from library" + +#: ../editors/ResourceEditor.py:282 msgid "Remove instance" msgstr "Remove instance" +#: ../etherlab/ConfigEditor.py:653 +msgid "Remove process variable" +msgstr "Remove process variable" + #: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "Remove slave" -#: ../editors/ResourceEditor.py:253 +#: ../etherlab/ConfigEditor.py:680 +msgid "Remove startup service variable" +msgstr "Remove startup service variable" + +#: ../editors/ResourceEditor.py:251 msgid "Remove task" msgstr "Remove task" -#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +#: ../bacnet/BacnetSlaveEditor.py:812 ../editors/CodeFileEditor.py:673 +#: ../controls/VariablePanel.py:484 msgid "Remove variable" msgstr "Remove variable" -#: ../IDEFrame.py:1979 +#: ../IDEFrame.py:1996 msgid "Rename" msgstr "Rename" -#: ../editors/FileManagementPanel.py:187 +#: ../editors/FileManagementPanel.py:186 msgid "Replace File" msgstr "Replace File" -#: ../editors/Viewer.py:598 +#: ../editors/Viewer.py:601 msgid "Replace Wire by connections" msgstr "Replace Wire by connections" @@ -2829,11 +3311,11 @@ msgid "Reset" msgstr "Reset" -#: ../editors/Viewer.py:681 +#: ../editors/Viewer.py:684 msgid "Reset Execution Order" msgstr "Reset Execution Order" -#: ../IDEFrame.py:453 +#: ../IDEFrame.py:459 msgid "Reset Perspective" msgstr "Reset Perspective" @@ -2841,7 +3323,7 @@ msgid "Reset search result" msgstr "Reset search result" -#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +#: ../BeremizIDE.py:1012 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "Resources" @@ -2849,11 +3331,11 @@ msgid "Retain" msgstr "Retain" -#: ../controls/VariablePanel.py:455 +#: ../controls/VariablePanel.py:457 msgid "Return Type:" msgstr "Return Type:" -#: ../editors/Viewer.py:582 +#: ../editors/Viewer.py:585 msgid "Right" msgstr "Right" @@ -2861,7 +3343,7 @@ msgid "Right PowerRail" msgstr "Right PowerRail" -#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:558 msgid "Rising Edge" msgstr "Rising Edge" @@ -2877,15 +3359,15 @@ msgid "Rounding up/down" msgstr "Rounding up/down" -#: ../ProjectController.py:1828 +#: ../ProjectController.py:1911 msgid "Run" msgstr "Run" -#: ../ProjectController.py:1127 +#: ../ProjectController.py:1175 msgid "Runtime IO extensions C code generation failed !\n" msgstr "Runtime IO extensions C code generation failed !\n" -#: ../ProjectController.py:1136 +#: ../ProjectController.py:1186 msgid "Runtime library extensions C code generation failed !\n" msgstr "Runtime library extensions C code generation failed !\n" @@ -2897,11 +3379,11 @@ msgid "SDO Server" msgstr "SDO Server" -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "SFC" msgstr "SFC" -#: ../PLCGenerator.py:1433 +#: ../PLCGenerator.py:1482 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" @@ -2912,7 +3394,7 @@ msgstr "SFC transition in POU \"%s\" must be connected." #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 +#: ../dialogs/PouDialog.py:128 msgid "ST" msgstr "ST" @@ -2924,7 +3406,7 @@ msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "SVG files (*.svg)|*.svg|All files|*.*" -#: ../features.py:36 +#: ../features.py:25 msgid "SVGUI" msgstr "SVGUI" @@ -2941,37 +3423,47 @@ msgid "Save as" msgstr "Save as" -#: ../ProjectController.py:530 +#: ../etherlab/EtherCATManagementEditor.py:941 +#: ../etherlab/EtherCATManagementEditor.py:1289 +msgid "Save as..." +msgstr "Save as..." + +#: ../ProjectController.py:546 msgid "Save path is the same as path of a project! \n" msgstr "Save path is the same as path of a project! \n" +#: ../etherlab/EthercatMaster.py:455 ../etherlab/EthercatMaster.py:764 +#: ../etherlab/EthercatMaster.py:765 +msgid "Scan Network" +msgstr "Scan Network" + #: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "Scope" -#: ../IDEFrame.py:644 +#: ../IDEFrame.py:650 msgid "Search" msgstr "Search" -#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:387 ../IDEFrame.py:431 msgid "Search in Project" msgstr "Search in Project" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:60 msgid "Seconds:" msgstr "Seconds:" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:393 msgid "Select All" msgstr "Select All" #: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 -#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 -#: ../controls/VariablePanel.py:378 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:314 +#: ../controls/VariablePanel.py:377 msgid "Select a variable class:" msgstr "Select a variable class:" -#: ../ProjectController.py:1293 +#: ../ProjectController.py:1354 msgid "Select an editor:" msgstr "Select an editor:" @@ -2979,11 +3471,11 @@ msgid "Select an instance" msgstr "Select an instance" -#: ../IDEFrame.py:628 +#: ../IDEFrame.py:634 msgid "Select an object" msgstr "Select an object" -#: ../ProjectController.py:537 +#: ../ProjectController.py:555 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "Selected directory already contains another project. Overwrite? \n" @@ -2999,6 +3491,14 @@ msgid "Selection Divergence" msgstr "Selection Divergence" +#: ../runtime/NevowServer.py:182 +msgid "Send" +msgstr "Send" + +#: ../runtime/NevowServer.py:181 +msgid "Send a message to the log" +msgstr "Send a message to the log" + #: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "Service Discovery" @@ -3007,7 +3507,7 @@ msgid "Services available:" msgstr "Services available:" -#: ../dialogs/LDElementDialog.py:79 +#: ../dialogs/LDElementDialog.py:79 ../runtime/WampClient.py:434 msgid "Set" msgstr "Set" @@ -3019,7 +3519,7 @@ msgid "Shift right" msgstr "Shift right" -#: ../ProjectController.py:1863 +#: ../ProjectController.py:1946 msgid "Show IEC code generated by PLCGenerator" msgstr "Show IEC code generated by PLCGenerator" @@ -3031,7 +3531,7 @@ msgid "Show Master generated by config_utils" msgstr "Show Master generated by config_utils" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1945 msgid "Show code" msgstr "Show code" @@ -3051,6 +3551,14 @@ msgid "Single" msgstr "Single" +#: ../etherlab/EtherCATManagementEditor.py:361 +msgid "Slave SDO Monitoring" +msgstr "Slave SDO Monitoring" + +#: ../etherlab/ConfigEditor.py:135 +msgid "Slave entries" +msgstr "Slave entries" + #: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "Source didn't change, no build.\n" @@ -3068,44 +3576,56 @@ msgid "Standard function blocks" msgstr "Standard function blocks" -#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +#: ../etherlab/ConfigEditor.py:68 +msgid "Standardized Device Profile" +msgstr "Standardized Device Profile" + +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Start Address" +msgstr "Start Address" + +#: ../ProjectController.py:1912 ../Beremiz_service.py:284 msgid "Start PLC" msgstr "Start PLC" -#: ../ProjectController.py:1074 +#: ../ProjectController.py:1121 #, python-format msgid "Start build in %s\n" msgstr "Start build in %s\n" -#: ../ProjectController.py:1397 +#: ../runtime/PlcStatus.py:12 msgid "Started" msgstr "Started" -#: ../ProjectController.py:1633 +#: ../ProjectController.py:1714 msgid "Starting PLC\n" msgstr "Starting PLC\n" -#: ../BeremizIDE.py:393 +#: ../etherlab/ConfigEditor.py:674 +msgid "Startup service variables assignments:" +msgstr "Startup service variables assignments:" + +#: ../BeremizIDE.py:389 msgid "Status ToolBar" msgstr "Status ToolBar" -#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2426 msgid "Step" msgstr "Step" -#: ../ProjectController.py:1835 +#: ../ProjectController.py:1918 msgid "Stop" msgstr "Stop" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:285 msgid "Stop PLC" msgstr "Stop PLC" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1919 msgid "Stop Running PLC" msgstr "Stop Running PLC" -#: ../ProjectController.py:1398 +#: ../runtime/PlcStatus.py:13 msgid "Stopped" msgstr "Stopped" @@ -3113,6 +3633,14 @@ msgid "Structure" msgstr "Structure" +#: ../etherlab/ConfigEditor.py:48 +msgid "SubIndex" +msgstr "SubIndex" + +#: ../etherlab/ConfigEditor.py:465 +msgid "Subindex" +msgstr "Subindex" + #: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "Subrange" @@ -3121,11 +3649,11 @@ msgid "Subtraction" msgstr "Subtraction" -#: ../ProjectController.py:1113 +#: ../ProjectController.py:1160 msgid "Successfully built.\n" msgstr "Successfully built.\n" -#: ../IDEFrame.py:449 +#: ../IDEFrame.py:451 msgid "Switch perspective" msgstr "Switch perspective" @@ -3141,19 +3669,19 @@ msgid "Tangent" msgstr "Tangent" -#: ../editors/ResourceEditor.py:97 +#: ../editors/ResourceEditor.py:94 msgid "Task" msgstr "Task" -#: ../editors/ResourceEditor.py:248 +#: ../editors/ResourceEditor.py:246 msgid "Tasks:" msgstr "Tasks:" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid "Temp" msgstr "Temp" -#: ../version.py:35 +#: ../version.py:37 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3173,7 +3701,15 @@ "You can subscribe to the list here:\n" "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" -#: ../editors/FileManagementPanel.py:186 +#: ../etherlab/EthercatMaster.py:454 +msgid "" +"The current network configuration will be deleted.\n" +"Do you want to continue?" +msgstr "" +"The current network configuration will be deleted.\n" +"Do you want to continue?" + +#: ../editors/FileManagementPanel.py:185 #, python-format msgid "" "The file '%s' already exist.\n" @@ -3182,20 +3718,25 @@ "The file '%s' already exist.\n" "Do you want to replace it?" +#: ../etherlab/EtherCATManagementEditor.py:928 +#: ../etherlab/EtherCATManagementEditor.py:1320 +msgid "The file does not exist!" +msgstr "The file does not exist!" + #: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "The group of block must be coherent!" -#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +#: ../BeremizIDE.py:569 ../IDEFrame.py:1059 msgid "There are changes, do you want to save?" msgstr "There are changes, do you want to save?" -#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1708 ../IDEFrame.py:1727 #, python-format msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?" msgstr "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?" -#: ../IDEFrame.py:1133 +#: ../IDEFrame.py:1146 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3207,7 +3748,7 @@ msgid "This option isn't available yet!" msgstr "This option isn't available yet!" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:546 #, python-format msgid "Tick: %d" msgstr "Tick: %d" @@ -3245,53 +3786,57 @@ msgid "Time-of-day subtraction" msgstr "Time-of-day subtraction" +#: ../IDEFrame.py:432 +msgid "Toggle fullscreen mode" +msgstr "Toggle fullscreen mode" + #: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "Toggle value" -#: ../editors/Viewer.py:584 +#: ../editors/Viewer.py:587 msgid "Top" msgstr "Top" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1931 msgid "Transfer" msgstr "Transfer" -#: ../ProjectController.py:1849 +#: ../ProjectController.py:1932 msgid "Transfer PLC" msgstr "Transfer PLC" -#: ../ProjectController.py:1802 +#: ../ProjectController.py:1884 msgid "Transfer completed successfully.\n" msgstr "Transfer completed successfully.\n" -#: ../ProjectController.py:1805 +#: ../ProjectController.py:1887 msgid "Transfer failed\n" msgstr "Transfer failed\n" -#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453 +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2428 ../editors/Viewer.py:2455 msgid "Transition" msgstr "Transition" -#: ../PLCGenerator.py:1564 +#: ../PLCGenerator.py:1613 #, python-format msgid "Transition \"%s\" body must contain an output variable or coil referring to its name" msgstr "Transition \"%s\" body must contain an output variable or coil referring to its name" -#: ../dialogs/PouTransitionDialog.py:91 +#: ../dialogs/PouTransitionDialog.py:90 msgid "Transition Name" msgstr "Transition Name" -#: ../dialogs/PouTransitionDialog.py:60 +#: ../dialogs/PouTransitionDialog.py:59 msgid "Transition Name:" msgstr "Transition Name:" -#: ../PLCGenerator.py:1657 +#: ../PLCGenerator.py:1706 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" -#: ../PLCGenerator.py:1646 +#: ../PLCGenerator.py:1695 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU" msgstr "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU" @@ -3313,17 +3858,17 @@ msgid "Triggering" msgstr "Triggering" -#: ../Beremiz_service.py:490 +#: ../Beremiz_service.py:503 msgid "Twisted unavailable." msgstr "Twisted unavailable." -#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 -#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 -#: ../controls/VariablePanel.py:61 +#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:48 +#: ../editors/ResourceEditor.py:94 ../editors/DataTypeEditor.py:55 +#: ../editors/CodeFileEditor.py:752 ../controls/VariablePanel.py:61 msgid "Type" msgstr "Type" -#: ../dialogs/BrowseLocationsDialog.py:54 +#: ../dialogs/BrowseLocationsDialog.py:51 msgid "Type and derivated" msgstr "Type and derivated" @@ -3340,16 +3885,25 @@ msgid "Type infos:" msgstr "Type infos:" -#: ../dialogs/BrowseLocationsDialog.py:55 +#: ../etherlab/EthercatCFileGenerator.py:76 +#, python-format +msgid "Type of location \"%s\" not yet supported!" +msgstr "Type of location \"%s\" not yet supported!" + +#: ../dialogs/BrowseLocationsDialog.py:52 msgid "Type strict" msgstr "Type strict" #: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 -#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:110 #: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "Type:" +#: ../runtime/WampClient.py:129 +msgid "TypeError register option: {}" +msgstr "TypeError register option: {}" + #: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 msgid "URI host:" msgstr "URI host:" @@ -3372,7 +3926,17 @@ msgid "Unable to get Xenomai's %s \n" msgstr "Unable to get Xenomai's %s \n" -#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#: ../bacnet/bacnet.py:430 +#, python-format +msgid "Unable to load file \"%s\"!" +msgstr "Unable to load file \"%s\"!" + +#: ../bacnet/bacnet.py:420 +#, python-format +msgid "Unable to save to file \"%s\"!" +msgstr "Unable to save to file \"%s\"!" + +#: ../PLCGenerator.py:1023 ../PLCGenerator.py:1301 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "Undefined block type \"{a1}\" in \"{a2}\" POU" @@ -3382,20 +3946,25 @@ msgid "Undefined pou type \"%s\"" msgstr "Undefined pou type \"%s\"" -#: ../IDEFrame.py:365 ../IDEFrame.py:423 +#: ../IDEFrame.py:368 ../IDEFrame.py:424 msgid "Undo" msgstr "Undo" -#: ../ProjectController.py:442 +#: ../ProjectController.py:457 msgid "Unknown" msgstr "Unknown" +#: ../etherlab/EthercatCFileGenerator.py:470 +#, python-brace-format +msgid "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}" +msgstr "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}" + #: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "Unknown variable \"%s\" for this POU!" -#: ../ProjectController.py:439 ../ProjectController.py:440 +#: ../ProjectController.py:454 ../ProjectController.py:455 msgid "Unnamed" msgstr "Unnamed" @@ -3404,12 +3973,20 @@ msgid "Unnamed%d" msgstr "Unnamed%d" -#: ../controls/VariablePanel.py:308 +#: ../controls/VariablePanel.py:307 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "Unrecognized data size \"%s\"" -#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +#: ../etherlab/EtherCATManagementEditor.py:2080 +msgid "Update" +msgstr "Update" + +#: ../runtime/WampClient.py:380 +msgid "Upload:" +msgstr "Upload:" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:852 msgid "User Data Types" msgstr "User Data Types" @@ -3421,7 +3998,7 @@ msgid "User-defined POUs" msgstr "User-defined POUs" -#: ../dialogs/ActionBlockDialog.py:42 +#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:465 msgid "Value" msgstr "Value" @@ -3429,24 +4006,29 @@ msgid "Values:" msgstr "Values:" -#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 -#: ../editors/Viewer.py:2456 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:625 +#: ../editors/Viewer.py:2458 msgid "Variable" msgstr "Variable" #: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 #: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 -#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:354 msgid "Variable Drop" msgstr "Variable Drop" -#: ../dialogs/FBDVariableDialog.py:68 +#: ../etherlab/ConfigEditor.py:70 +#, python-format +msgid "Variable Index: #x%4.4X" +msgstr "Variable Index: #x%4.4X" + +#: ../dialogs/FBDVariableDialog.py:58 msgid "Variable Properties" msgstr "Variable Properties" #: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 -#: ../controls/VariablePanel.py:379 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Variable class" msgstr "Variable class" @@ -3454,24 +4036,28 @@ msgid "Variable don't belong to this POU!" msgstr "Variable don't belong to this POU!" +#: ../etherlab/ConfigEditor.py:280 +msgid "Variable entries:" +msgstr "Variable entries:" + #: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "Variable:" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid "Variables" msgstr "Variables" -#: ../controls/ProjectPropertiesPanel.py:166 +#: ../controls/ProjectPropertiesPanel.py:169 msgid "Vertical:" msgstr "Vertical:" -#: ../runtime/WampClient.py:113 +#: ../runtime/WampClient.py:170 #, python-format msgid "WAMP Client connection failed (%s) .. retrying .." msgstr "WAMP Client connection failed (%s) .. retrying .." -#: ../runtime/WampClient.py:117 +#: ../runtime/WampClient.py:179 #, python-format msgid "WAMP Client connection lost (%s) .. retrying .." msgstr "WAMP Client connection lost (%s) .. retrying .." @@ -3480,49 +4066,66 @@ msgid "WAMP ID:" msgstr "WAMP ID:" -#: ../runtime/WampClient.py:172 +#: ../runtime/WampClient.py:413 +msgid "WAMP Server URL" +msgstr "WAMP Server URL" + +#: ../runtime/WampClient.py:276 +msgid "WAMP authentication has no secret configured" +msgstr "WAMP authentication has no secret configured" + +#: ../runtime/WampClient.py:304 +msgid "WAMP client can not connect to :" +msgstr "WAMP client can not connect to :" + +#: ../runtime/WampClient.py:301 msgid "WAMP client connecting to :" msgstr "WAMP client connecting to :" -#: ../runtime/WampClient.py:148 -msgid "WAMP client connection not established!" -msgstr "WAMP client connection not established!" - -#: ../Beremiz_service.py:625 +#: ../Beremiz_service.py:628 msgid "WAMP client startup failed. " msgstr "WAMP client startup failed. " -#: ../Beremiz_service.py:621 -msgid "WAMP config is incomplete." -msgstr "WAMP config is incomplete." - -#: ../Beremiz_service.py:623 -msgid "WAMP config is missing." -msgstr "WAMP config is missing." - -#: ../connectors/WAMP/__init__.py:99 +#: ../runtime/WampClient.py:206 +msgid "WAMP configuration error : missing '{}' parameter." +msgstr "WAMP configuration error : missing '{}' parameter." + +#: ../runtime/WampClient.py:192 +msgid "WAMP configuration error:" +msgstr "WAMP configuration error:" + +#: ../connectors/WAMP/__init__.py:100 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "WAMP connecting to URL : %s\n" -#: ../connectors/WAMP/__init__.py:140 +#: ../connectors/WAMP/__init__.py:141 msgid "WAMP connection timeout" msgstr "WAMP connection timeout" -#: ../connectors/WAMP/__init__.py:158 +#: ../connectors/WAMP/__init__.py:159 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "WAMP connection to '%s' failed.\n" -#: ../Beremiz_service.py:595 +#: ../runtime/WampClient.py:280 +msgid "WAMP deactivated in configuration" +msgstr "WAMP deactivated in configuration" + +#: ../Beremiz_service.py:605 msgid "WAMP import failed :" msgstr "WAMP import failed :" -#: ../runtime/WampClient.py:126 -msgid "WAMP load error: " -msgstr "WAMP load error: " - -#: ../runtime/WampClient.py:108 +#: ../runtime/WampClient.py:241 +msgid "WAMP secret empty" +msgstr "WAMP secret empty" + +#: ../runtime/WampClient.py:139 +#, python-format +msgid "WAMP session joined (%s) by:" +msgstr "WAMP session joined (%s) by:" + +#: ../runtime/WampClient.py:146 msgid "WAMP session left" msgstr "WAMP session left" @@ -3530,15 +4133,24 @@ msgid "WXGLADE GUI" msgstr "WXGLADE GUI" -#: ../runtime/WampClient.py:137 -msgid "Wamp secret load error:" -msgstr "Wamp secret load error:" - -#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +#: ../runtime/WampClient.py:432 +msgid "Wamp Settings" +msgstr "Wamp Settings" + +#: ../dialogs/PouDialog.py:172 ../editors/LDViewer.py:902 msgid "Warning" msgstr "Warning" -#: ../ProjectController.py:726 +#: ../etherlab/EthercatCFileGenerator.py:405 +#: ../etherlab/EthercatCFileGenerator.py:571 +msgid "Warning: " +msgstr "Warning: " + +#: ../wxglade_hmi/wxglade_hmi.py:166 +msgid "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n" +msgstr "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n" + +#: ../ProjectController.py:756 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "Warnings in ST/IL/SFC code generator :\n" @@ -3546,7 +4158,7 @@ msgid "Whole Project" msgstr "Whole Project" -#: ../controls/ProjectPropertiesPanel.py:134 +#: ../controls/ProjectPropertiesPanel.py:137 msgid "Width:" msgstr "Width:" @@ -3554,14 +4166,46 @@ msgid "Wrap search" msgstr "Wrap search" +#: ../etherlab/ConfigEditor.py:345 +msgid "Write to (nodeid, index, subindex)" +msgstr "Write to (nodeid, index, subindex)" + #: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "Written by" -#: ../features.py:35 +#: ../etherlab/EthercatCFileGenerator.py:409 +#: ../etherlab/EthercatCFileGenerator.py:499 +#, python-format +msgid "Wrong direction for location \"%s\"!" +msgstr "Wrong direction for location \"%s\"!" + +#: ../etherlab/EthercatCFileGenerator.py:400 +#: ../etherlab/EthercatCFileGenerator.py:487 +#, python-format +msgid "Wrong type for location \"%s\"!" +msgstr "Wrong type for location \"%s\"!" + +#: ../features.py:24 msgid "WxGlade GUI" msgstr "WxGlade GUI" +#: ../etherlab/ConfigEditor.py:1236 +msgid "XML files (*.xml)|*.xml|All files|*.*" +msgstr "XML files (*.xml)|*.xml|All files|*.*" + +#: ../etherlab/EtherCATManagementEditor.py:652 +msgid "You can input only hex, dec value" +msgstr "You can input only hex, dec value" + +#: ../etherlab/EtherCATManagementEditor.py:1999 +msgid "You can't modify it. This register is read-only or it's not connected." +msgstr "You can't modify it. This register is read-only or it's not connected." + +#: ../etherlab/EtherCATManagementEditor.py:648 +msgid "You cannot SDO download this state" +msgstr "You cannot SDO download this state" + #: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" @@ -3570,7 +4214,7 @@ "You don't have write permissions.\n" "Open Inkscape anyway ?" -#: ../wxglade_hmi/wxglade_hmi.py:160 +#: ../wxglade_hmi/wxglade_hmi.py:175 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" @@ -3578,7 +4222,11 @@ "You don't have write permissions.\n" "Open wxGlade anyway ?" -#: ../ProjectController.py:390 +#: ../etherlab/EtherCATManagementEditor.py:2002 +msgid "You entered wrong value. You can enter dec or hex value only." +msgstr "You entered wrong value. You can enter dec or hex value only." + +#: ../ProjectController.py:403 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3602,11 +4250,21 @@ msgid "You must type a value!" msgstr "You must type a value!" -#: ../IDEFrame.py:440 +#: ../IDEFrame.py:442 msgid "Zoom" msgstr "Zoom" -#: ../dialogs/DurationEditorDialog.py:158 +#: ../etherlab/EtherCATManagementEditor.py:911 +#: ../etherlab/EtherCATManagementEditor.py:1307 +msgid "bin files (*.bin)|*.bin" +msgstr "bin files (*.bin)|*.bin" + +#: ../etherlab/EtherCATManagementEditor.py:942 +#: ../etherlab/EtherCATManagementEditor.py:1290 +msgid "bin files (*.bin)|*.bin|All files|*.*" +msgstr "bin files (*.bin)|*.bin|All files|*.*" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "days" msgstr "days" @@ -3620,35 +4278,39 @@ msgid "exited with status {a1} (pid {a2})\n" msgstr "exited with status {a1} (pid {a2})\n" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "function" msgstr "function" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "functionBlock" msgstr "functionBlock" -#: ../dialogs/DurationEditorDialog.py:158 +#: ../dialogs/DurationEditorDialog.py:159 msgid "hours" msgstr "hours" -#: ../ProjectController.py:753 +#: ../ProjectController.py:784 msgid "matiec installation is not found\n" msgstr "matiec installation is not found\n" -#: ../dialogs/DurationEditorDialog.py:160 +#: ../dialogs/DurationEditorDialog.py:162 +msgid "microseconds" +msgstr "microseconds" + +#: ../dialogs/DurationEditorDialog.py:161 msgid "milliseconds" msgstr "milliseconds" -#: ../dialogs/DurationEditorDialog.py:159 +#: ../dialogs/DurationEditorDialog.py:160 msgid "minutes" msgstr "minutes" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "program" msgstr "program" -#: ../dialogs/DurationEditorDialog.py:159 +#: ../dialogs/DurationEditorDialog.py:160 msgid "seconds" msgstr "seconds" @@ -3664,6 +4326,10 @@ msgid "string right of" msgstr "string right of" +#: ../etherlab/EtherCATManagementEditor.py:323 +msgid "update" +msgstr "update" + #: ../Beremiz.py:167 msgid "update info unavailable." msgstr "update info unavailable." @@ -3718,6 +4384,33 @@ msgid "CAN_Driver" msgstr "CAN_Driver" +msgid "BACnetServerNode" +msgstr "BACnetServerNode" + +msgid "Network_Interface" +msgstr "Network_Interface" + +msgid "UDP_Port_Number" +msgstr "UDP_Port_Number" + +msgid "BACnet_Communication_Control_Password" +msgstr "BACnet_Communication_Control_Password" + +msgid "BACnet_Device_ID" +msgstr "BACnet_Device_ID" + +msgid "BACnet_Device_Name" +msgstr "BACnet_Device_Name" + +msgid "BACnet_Device_Location" +msgstr "BACnet_Device_Location" + +msgid "BACnet_Device_Description" +msgstr "BACnet_Device_Description" + +msgid "BACnet_Device_Application_Software_Version" +msgstr "BACnet_Device_Application_Software_Version" + msgid "Generic" msgstr "Generic" @@ -3814,6 +4507,24 @@ msgid "MaxRemoteTCPclients" msgstr "MaxRemoteTCPclients" +msgid "CIA402SlaveParams" +msgstr "CIA402SlaveParams" + +msgid "Enable%s" +msgstr "Enable%s" + +msgid "ProcessVariables" +msgstr "ProcessVariables" + +msgid "variable" +msgstr "variable" + +msgid "ReadFrom" +msgstr "ReadFrom" + +msgid "WriteTo" +msgstr "WriteTo" + msgid "BaseParams" msgstr "BaseParams" @@ -3844,9 +4555,6 @@ msgid "variables" msgstr "variables" -msgid "variable" -msgstr "variable" - msgid "name" msgstr "name" diff -r e0f16317668e -r 15f18dc8b56a i18n/messages.pot --- a/i18n/messages.pot Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/messages.pot Fri Nov 23 00:33:04 2018 +0100 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Beremiz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-15 16:39+0300\n" +"POT-Creation-Date: 2018-10-03 14:20+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -32,37 +32,46 @@ "Traceback:\n" msgstr "" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid " External" msgstr "" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " InOut" msgstr "" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " Input" msgstr "" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid " Local" msgstr "" -#: ../controls/VariablePanel.py:89 +#: ../controls/VariablePanel.py:86 msgid " Output" msgstr "" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid " Temp" msgstr "" -#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74 -#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122 +#: ../etherlab/etherlab.py:301 +#, python-format +msgid " (rev. %s)" +msgstr "" + +#: ../etherlab/CommonEtherCATFunction.py:1599 +msgid " Warning..." +msgstr "" + +#: ../dialogs/PouTransitionDialog.py:100 ../dialogs/ProjectDialog.py:72 +#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:157 #, python-format msgid " and %s" msgstr "" -#: ../ProjectController.py:1182 +#: ../ProjectController.py:1236 msgid " generation failed !\n" msgstr "" @@ -86,7 +95,7 @@ msgid "\"%s\" can't use itself!" msgstr "" -#: ../IDEFrame.py:1688 ../IDEFrame.py:1707 +#: ../IDEFrame.py:1705 ../IDEFrame.py:1724 #, python-format msgid "\"%s\" config already exists!" msgstr "" @@ -101,32 +110,32 @@ msgid "\"%s\" configuration doesn't exist !!!" msgstr "" -#: ../IDEFrame.py:1638 +#: ../IDEFrame.py:1655 #, python-format msgid "\"%s\" data type already exists!" msgstr "" -#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220 +#: ../dialogs/PouTransitionDialog.py:111 ../dialogs/BlockPreviewDialog.py:220 #: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304 #: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418 #: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299 -#: ../controls/VariablePanel.py:425 +#: ../controls/VariablePanel.py:424 #, python-format msgid "\"%s\" element for this pou already exists!" msgstr "" -#: ../BeremizIDE.py:928 +#: ../BeremizIDE.py:925 #, python-format msgid "\"%s\" folder is not a valid Beremiz project\n" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108 +#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:107 #: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54 -#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129 -#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518 -#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603 -#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787 -#: ../IDEFrame.py:1629 +#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:164 +#: ../etherlab/ConfigEditor.py:973 ../editors/ResourceEditor.py:481 +#: ../editors/ResourceEditor.py:518 ../editors/DataTypeEditor.py:571 +#: ../editors/DataTypeEditor.py:603 ../editors/CodeFileEditor.py:793 +#: ../controls/VariablePanel.py:798 ../IDEFrame.py:1646 #, python-format msgid "\"%s\" is a keyword. It can't be used!" msgstr "" @@ -141,27 +150,28 @@ msgid "\"%s\" is not a valid folder!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106 +#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:105 #: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52 -#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127 -#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516 -#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772 -#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627 +#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:162 +#: ../etherlab/ConfigEditor.py:971 ../editors/ResourceEditor.py:479 +#: ../editors/ResourceEditor.py:516 ../editors/DataTypeEditor.py:601 +#: ../editors/CodeFileEditor.py:791 ../controls/VariablePanel.py:796 +#: ../IDEFrame.py:1644 #, python-format msgid "\"%s\" is not a valid identifier!" msgstr "" -#: ../IDEFrame.py:2436 +#: ../IDEFrame.py:2454 #, python-format msgid "\"%s\" is used by one or more POUs. Do you wish to continue?" msgstr "" -#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131 +#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:166 #: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389 #: ../editors/Viewer.py:411 ../editors/TextViewer.py:268 #: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351 -#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364 -#: ../IDEFrame.py:1647 +#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:363 +#: ../IDEFrame.py:1664 #, python-format msgid "\"%s\" pou already exists!" msgstr "" @@ -188,7 +198,7 @@ "Right value must be greater than left value." msgstr "" -#: ../PLCGenerator.py:1133 +#: ../PLCGenerator.py:1182 #, python-brace-format msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected" msgstr "" @@ -208,35 +218,35 @@ msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:559 #, python-format msgid "%03gms" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:550 #, python-format msgid "%dd" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:189 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:551 #, python-format msgid "%dh" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:188 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:552 #, python-format msgid "%dm" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:186 #, python-format msgid "%dms" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:187 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:553 #, python-format msgid "%ds" msgstr "" @@ -269,7 +279,12 @@ msgid "%s body don't have text!" msgstr "" -#: ../IDEFrame.py:388 +#: ../etherlab/ConfigEditor.py:856 +#, python-format +msgid "%s's nodes" +msgstr "" + +#: ../IDEFrame.py:391 msgid "&Add Element" msgstr "" @@ -278,35 +293,35 @@ msgid "&Close" msgstr "" -#: ../IDEFrame.py:361 +#: ../IDEFrame.py:364 msgid "&Configuration" msgstr "" -#: ../IDEFrame.py:350 +#: ../IDEFrame.py:353 msgid "&Data Type" msgstr "" -#: ../IDEFrame.py:392 +#: ../IDEFrame.py:395 msgid "&Delete" msgstr "" -#: ../IDEFrame.py:342 +#: ../IDEFrame.py:345 msgid "&Display" msgstr "" -#: ../IDEFrame.py:341 +#: ../IDEFrame.py:344 msgid "&Edit" msgstr "" -#: ../IDEFrame.py:340 +#: ../IDEFrame.py:343 msgid "&File" msgstr "" -#: ../IDEFrame.py:352 +#: ../IDEFrame.py:355 msgid "&Function" msgstr "" -#: ../IDEFrame.py:343 +#: ../IDEFrame.py:346 msgid "&Help" msgstr "" @@ -314,7 +329,7 @@ msgid "&License" msgstr "" -#: ../IDEFrame.py:356 +#: ../IDEFrame.py:359 msgid "&Program" msgstr "" @@ -326,10 +341,14 @@ msgid "&Recent Projects" msgstr "" -#: ../IDEFrame.py:358 +#: ../IDEFrame.py:361 msgid "&Resource" msgstr "" +#: ../etherlab/ConfigEditor.py:450 +msgid "'Read from' and 'Write to' variables types are not compatible" +msgstr "" + #: ../controls/SearchResultPanel.py:247 #, python-brace-format msgid "'{a1}' - {a2} match in project" @@ -340,7 +359,7 @@ msgid "'{a1}' - {a2} matches in project" msgstr "" -#: ../connectors/PYRO/__init__.py:98 +#: ../connectors/PYRO/__init__.py:99 #, python-brace-format msgid "'{a1}' is located at {a2}\n" msgstr "" @@ -350,8 +369,8 @@ msgid "(%d matches)" msgstr "" -#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101 -#: ../dialogs/PouDialog.py:124 +#: ../dialogs/PouTransitionDialog.py:102 ../dialogs/PouActionDialog.py:101 +#: ../dialogs/PouDialog.py:159 #, python-format msgid ", %s" msgstr "" @@ -376,15 +395,15 @@ msgid "1s" msgstr "" -#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696 -#: ../IDEFrame.py:1715 +#: ../dialogs/PouDialog.py:168 ../IDEFrame.py:1667 ../IDEFrame.py:1713 +#: ../IDEFrame.py:1732 #, python-format msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110 +#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:109 #: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108 -#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677 +#: ../controls/VariablePanel.py:800 ../IDEFrame.py:1681 ../IDEFrame.py:1694 #, python-format msgid "A POU named \"%s\" already exists!" msgstr "" @@ -394,21 +413,21 @@ msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseLocationsDialog.py:228 msgid "A location must be selected!" msgstr "" -#: ../editors/ResourceEditor.py:485 +#: ../editors/ResourceEditor.py:483 msgid "A task with the same name already exists!" msgstr "" -#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791 -#: ../IDEFrame.py:1666 ../IDEFrame.py:1679 +#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:802 +#: ../IDEFrame.py:1683 ../IDEFrame.py:1696 #, python-format msgid "A variable with \"%s\" as name already exists in this pou!" msgstr "" -#: ../editors/CodeFileEditor.py:778 +#: ../editors/CodeFileEditor.py:797 #, python-format msgid "A variable with \"%s\" as name already exists!" msgstr "" @@ -421,11 +440,15 @@ msgid "Absolute number" msgstr "" +#: ../etherlab/ConfigEditor.py:48 +msgid "Access" +msgstr "" + #: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47 msgid "Action" msgstr "" -#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427 +#: ../editors/Viewer.py:656 ../editors/Viewer.py:2429 msgid "Action Block" msgstr "" @@ -450,56 +473,64 @@ msgid "Actions:" msgstr "" -#: ../editors/Viewer.py:473 +#: ../editors/Viewer.py:484 msgid "Active" msgstr "" #: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108 -#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686 +#: ../BeremizIDE.py:998 ../editors/Viewer.py:689 msgid "Add" msgstr "" -#: ../IDEFrame.py:1924 ../IDEFrame.py:1959 +#: ../IDEFrame.py:1941 ../IDEFrame.py:1976 msgid "Add Action" msgstr "" -#: ../features.py:33 +#: ../features.py:22 msgid "Add C code accessing located variables synchronously" msgstr "" -#: ../IDEFrame.py:1907 +#: ../IDEFrame.py:1924 msgid "Add Configuration" msgstr "" -#: ../IDEFrame.py:1887 +#: ../IDEFrame.py:1904 msgid "Add DataType" msgstr "" -#: ../editors/Viewer.py:609 +#: ../editors/Viewer.py:612 msgid "Add Divergence Branch" msgstr "" +#: ../etherlab/EthercatMaster.py:297 +msgid "Add Ethercat Slave" +msgstr "" + +#: ../etherlab/EthercatMaster.py:297 +msgid "Add Ethercat Slave to Master" +msgstr "" + #: ../dialogs/DiscoveryDialog.py:121 msgid "Add IP" msgstr "" -#: ../IDEFrame.py:1895 +#: ../IDEFrame.py:1912 msgid "Add POU" msgstr "" -#: ../features.py:34 +#: ../features.py:23 msgid "Add Python code executed asynchronously" msgstr "" -#: ../IDEFrame.py:1935 ../IDEFrame.py:1985 +#: ../IDEFrame.py:1952 ../IDEFrame.py:2002 msgid "Add Resource" msgstr "" -#: ../IDEFrame.py:1913 ../IDEFrame.py:1956 +#: ../IDEFrame.py:1930 ../IDEFrame.py:1973 msgid "Add Transition" msgstr "" -#: ../editors/Viewer.py:596 +#: ../editors/Viewer.py:599 msgid "Add Wire Segment" msgstr "" @@ -507,7 +538,7 @@ msgid "Add a new initial step" msgstr "" -#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784 +#: ../editors/Viewer.py:2790 ../editors/SFCViewer.py:784 msgid "Add a new jump" msgstr "" @@ -515,7 +546,7 @@ msgid "Add a new step" msgstr "" -#: ../features.py:35 +#: ../features.py:24 msgid "Add a simple WxGlade based GUI." msgstr "" @@ -527,22 +558,46 @@ msgid "Add element" msgstr "" -#: ../editors/ResourceEditor.py:283 +#: ../etherlab/ConfigEditor.py:1388 +msgid "Add file from ESI files database" +msgstr "" + +#: ../etherlab/ConfigEditor.py:1360 +msgid "Add file to project" +msgstr "" + +#: ../editors/ResourceEditor.py:281 msgid "Add instance" msgstr "" +#: ../etherlab/ConfigEditor.py:652 +msgid "Add process variable" +msgstr "" + #: ../canfestival/NetworkEditor.py:110 msgid "Add slave" msgstr "" -#: ../editors/ResourceEditor.py:252 +#: ../etherlab/ConfigEditor.py:679 +msgid "Add startup service variable" +msgstr "" + +#: ../editors/ResourceEditor.py:250 msgid "Add task" msgstr "" -#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481 +#: ../bacnet/BacnetSlaveEditor.py:811 ../editors/CodeFileEditor.py:672 +#: ../controls/VariablePanel.py:483 msgid "Add variable" msgstr "" +#: ../etherlab/etherlab.py:186 +msgid "" +"Adding a PDO not defined in default configuration\n" +"for mapping needed location variables\n" +"(1 if possible)" +msgstr "" + #: ../plcopen/iec_std.csv:33 msgid "Addition" msgstr "" @@ -551,27 +606,28 @@ msgid "Additional function blocks" msgstr "" -#: ../editors/Viewer.py:669 +#: ../editors/Viewer.py:672 msgid "Adjust Block Size" msgstr "" -#: ../editors/Viewer.py:1720 +#: ../editors/Viewer.py:1722 msgid "Alignment" msgstr "" #: ../dialogs/BrowseLocationsDialog.py:42 -#: ../dialogs/BrowseLocationsDialog.py:53 -#: ../dialogs/BrowseLocationsDialog.py:152 -#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307 -#: ../controls/VariablePanel.py:88 +#: ../dialogs/BrowseLocationsDialog.py:50 +#: ../dialogs/BrowseLocationsDialog.py:151 +#: ../dialogs/BrowseLocationsDialog.py:154 ../etherlab/ConfigEditor.py:65 +#: ../etherlab/ConfigEditor.py:853 ../controls/LogViewer.py:307 +#: ../controls/VariablePanel.py:85 msgid "All" msgstr "" -#: ../editors/FileManagementPanel.py:37 +#: ../editors/FileManagementPanel.py:51 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv" msgstr "" -#: ../ProjectController.py:1670 +#: ../ProjectController.py:1752 msgid "Already connected. Please disconnect\n" msgstr "" @@ -584,6 +640,23 @@ msgid "An instance with the same name already exists!" msgstr "" +#: ../etherlab/ConfigEditor.py:975 +#, python-format +msgid "An variable named \"%s\" already exists!" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:935 +msgid "Analog Input Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:934 +msgid "Analog Output Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:933 +msgid "Analog Value Objects" +msgstr "" + #: ../dialogs/ConnectionDialog.py:103 msgid "Apply name modification to all continuations with the same name" msgstr "" @@ -605,7 +678,7 @@ msgstr "" #: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649 -#: ../controls/VariablePanel.py:872 +#: ../controls/VariablePanel.py:883 msgid "Array" msgstr "" @@ -613,22 +686,34 @@ msgid "Assignment" msgstr "" -#: ../dialogs/FBDVariableDialog.py:226 +#: ../dialogs/FBDVariableDialog.py:227 msgid "At least a variable or an expression must be selected!" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:111 +#: ../controls/ProjectPropertiesPanel.py:113 msgid "Author" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:108 +#: ../controls/ProjectPropertiesPanel.py:110 msgid "Author Name (optional):" msgstr "" +#: ../etherlab/EthercatCIA402Slave.py:125 +msgid "Axis Pos" +msgstr "" + +#: ../etherlab/EthercatCIA402Slave.py:118 +msgid "Axis Ref" +msgstr "" + #: ../dialogs/FindInPouDialog.py:80 msgid "Backward" msgstr "" +#: ../features.py:19 +msgid "Bacnet support" +msgstr "" + #: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672 #, python-format msgid "Bad location size : %s" @@ -639,14 +724,30 @@ msgid "Base Type:" msgstr "" -#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830 +#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:841 msgid "Base Types" msgstr "" -#: ../BeremizIDE.py:483 +#: ../BeremizIDE.py:479 msgid "Beremiz" msgstr "" +#: ../runtime/NevowServer.py:201 +msgid "Beremiz Runtime Settings" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:938 +msgid "Binary Input Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:937 +msgid "Binary Output Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:936 +msgid "Binary Value Objects" +msgstr "" + #: ../plcopen/iec_std.csv:70 msgid "Binary selection (1 of 2)" msgstr "" @@ -675,7 +776,7 @@ msgid "Bitwise inverting" msgstr "" -#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440 +#: ../editors/Viewer.py:624 ../editors/Viewer.py:2442 msgid "Block" msgstr "" @@ -687,11 +788,11 @@ msgid "Block name" msgstr "" -#: ../editors/Viewer.py:586 +#: ../editors/Viewer.py:589 msgid "Bottom" msgstr "" -#: ../ProjectController.py:1400 +#: ../runtime/PlcStatus.py:11 msgid "Broken" msgstr "" @@ -700,27 +801,27 @@ msgid "Browse %s values library" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:72 +#: ../dialogs/BrowseLocationsDialog.py:69 msgid "Browse Locations" msgstr "" -#: ../ProjectController.py:1815 +#: ../ProjectController.py:1898 msgid "Build" msgstr "" -#: ../ProjectController.py:1335 +#: ../ProjectController.py:1397 msgid "Build directory already clean\n" msgstr "" -#: ../ProjectController.py:1816 +#: ../ProjectController.py:1899 msgid "Build project into build folder" msgstr "" -#: ../ProjectController.py:1108 +#: ../ProjectController.py:1155 msgid "C Build crashed !\n" msgstr "" -#: ../ProjectController.py:1105 +#: ../ProjectController.py:1152 msgid "C Build failed.\n" msgstr "" @@ -728,7 +829,7 @@ msgid "C code" msgstr "" -#: ../ProjectController.py:1186 +#: ../ProjectController.py:1240 msgid "C code generated successfully.\n" msgstr "" @@ -741,7 +842,7 @@ msgid "C compilation of %s failed.\n" msgstr "" -#: ../features.py:33 +#: ../features.py:22 msgid "C extension" msgstr "" @@ -757,16 +858,20 @@ msgid "CANOpen slave" msgstr "" -#: ../features.py:31 +#: ../features.py:18 msgid "CANopen support" msgstr "" +#: ../etherlab/ConfigEditor.py:858 +msgid "CIA402 nodes" +msgstr "" + #: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853 #: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894 msgid "Can only generate execution order on FBD networks!" msgstr "" -#: ../controls/VariablePanel.py:291 +#: ../controls/VariablePanel.py:290 msgid "Can only give a location to local or global variables" msgstr "" @@ -775,7 +880,7 @@ msgid "Can't generate program to file %s!" msgstr "" -#: ../controls/VariablePanel.py:289 +#: ../controls/VariablePanel.py:288 msgid "Can't give a location to a function block instance" msgstr "" @@ -784,7 +889,7 @@ msgid "Can't save project to file %s!" msgstr "" -#: ../controls/VariablePanel.py:339 +#: ../controls/VariablePanel.py:338 msgid "Can't set an initial value to a function block instance" msgstr "" @@ -798,11 +903,11 @@ msgid "Cannot find lower free IEC channel than %d\n" msgstr "" -#: ../connectors/PYRO/__init__.py:139 +#: ../connectors/PYRO/__init__.py:140 msgid "Cannot get PLC status - connection failed.\n" msgstr "" -#: ../ProjectController.py:967 +#: ../ProjectController.py:1013 msgid "Cannot open/parse VARIABLES.csv!\n" msgstr "" @@ -811,7 +916,7 @@ msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))" msgstr "" -#: ../ProjectController.py:1761 +#: ../ProjectController.py:1842 msgid "Cannot transfer while PLC is running. Stop it now?" msgstr "" @@ -819,27 +924,27 @@ msgid "Case sensitive" msgstr "" -#: ../editors/Viewer.py:581 +#: ../editors/Viewer.py:584 msgid "Center" msgstr "" -#: ../Beremiz_service.py:276 +#: ../Beremiz_service.py:289 msgid "Change IP of interface to bind" msgstr "" -#: ../Beremiz_service.py:275 +#: ../Beremiz_service.py:288 msgid "Change Name" msgstr "" -#: ../IDEFrame.py:1977 +#: ../IDEFrame.py:1994 msgid "Change POU Type To" msgstr "" -#: ../Beremiz_service.py:277 +#: ../Beremiz_service.py:290 msgid "Change Port Number" msgstr "" -#: ../Beremiz_service.py:278 +#: ../Beremiz_service.py:291 msgid "Change working directory" msgstr "" @@ -851,16 +956,21 @@ msgid "Choose a SVG file" msgstr "" -#: ../ProjectController.py:561 +#: ../etherlab/EtherCATManagementEditor.py:911 +#: ../etherlab/EtherCATManagementEditor.py:1306 +msgid "Choose a binary file" +msgstr "" + +#: ../ProjectController.py:582 msgid "Choose a directory to save project" msgstr "" -#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276 -#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 +#: ../canfestival/canfestival.py:171 ../bacnet/bacnet.py:434 +#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357 msgid "Choose a file" msgstr "" -#: ../BeremizIDE.py:900 +#: ../BeremizIDE.py:897 msgid "Choose a project" msgstr "" @@ -869,19 +979,23 @@ msgid "Choose a value for %s:" msgstr "" -#: ../Beremiz_service.py:333 +#: ../Beremiz_service.py:346 msgid "Choose a working directory " msgstr "" -#: ../BeremizIDE.py:864 +#: ../etherlab/ConfigEditor.py:1234 +msgid "Choose an XML file" +msgstr "" + +#: ../BeremizIDE.py:861 msgid "Choose an empty directory for new project" msgstr "" -#: ../ProjectController.py:468 +#: ../ProjectController.py:483 msgid "Chosen folder doesn't contain a program. It's not a valid project!" msgstr "" -#: ../ProjectController.py:435 +#: ../ProjectController.py:450 msgid "Chosen folder isn't empty. You can't use it for a new project!" msgstr "" @@ -889,15 +1003,15 @@ msgid "Class" msgstr "" -#: ../controls/VariablePanel.py:472 +#: ../controls/VariablePanel.py:474 msgid "Class Filter:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:74 +#: ../dialogs/FBDVariableDialog.py:75 msgid "Class:" msgstr "" -#: ../ProjectController.py:1821 +#: ../ProjectController.py:1904 msgid "Clean" msgstr "" @@ -905,32 +1019,33 @@ msgid "Clean log messages" msgstr "" -#: ../ProjectController.py:1822 +#: ../ProjectController.py:1905 msgid "Clean project build folder" msgstr "" -#: ../ProjectController.py:1332 +#: ../ProjectController.py:1394 msgid "Cleaning the build directory\n" msgstr "" -#: ../IDEFrame.py:437 +#: ../IDEFrame.py:439 msgid "Clear Errors" msgstr "" -#: ../editors/Viewer.py:680 +#: ../editors/Viewer.py:683 msgid "Clear Execution Order" msgstr "" #: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112 +#: ../etherlab/ConfigEditor.py:1361 msgid "Close" msgstr "" -#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183 +#: ../BeremizIDE.py:623 ../PLCOpenEditor.py:183 msgid "Close Application" msgstr "" -#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81 -#: ../IDEFrame.py:1040 +#: ../BeremizIDE.py:253 ../BeremizIDE.py:562 ../PLCOpenEditor.py:81 +#: ../IDEFrame.py:1053 msgid "Close Project" msgstr "" @@ -938,28 +1053,32 @@ msgid "Close Tab" msgstr "" -#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448 +#: ../editors/Viewer.py:641 ../editors/Viewer.py:2450 msgid "Coil" msgstr "" -#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517 +#: ../editors/Viewer.py:662 ../editors/LDViewer.py:517 msgid "Comment" msgstr "" +#: ../etherlab/ConfigEditor.py:66 +msgid "Communication Parameters" +msgstr "" + #: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134 #: ../PLCOpenEditor.py:138 msgid "Community support" msgstr "" -#: ../dialogs/ProjectDialog.py:65 +#: ../dialogs/ProjectDialog.py:63 msgid "Company Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:106 +#: ../controls/ProjectPropertiesPanel.py:108 msgid "Company Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:107 +#: ../controls/ProjectPropertiesPanel.py:109 msgid "Company URL (optional):" msgstr "" @@ -967,7 +1086,7 @@ msgid "Comparison" msgstr "" -#: ../ProjectController.py:756 +#: ../ProjectController.py:787 msgid "Compiling IEC Program into C code...\n" msgstr "" @@ -993,25 +1112,25 @@ #: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403 #: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343 -#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354 +#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:353 msgid "Confirm or change variable name" msgstr "" -#: ../ProjectController.py:1842 +#: ../ProjectController.py:1925 msgid "Connect" msgstr "" -#: ../ProjectController.py:1843 +#: ../ProjectController.py:1926 msgid "Connect to the target PLC" msgstr "" -#: ../ProjectController.py:1391 +#: ../ProjectController.py:1469 #, python-format msgid "Connected to URI: %s" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623 -#: ../editors/Viewer.py:2441 +#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:626 +#: ../editors/Viewer.py:2443 msgid "Connection" msgstr "" @@ -1019,25 +1138,25 @@ msgid "Connection Properties" msgstr "" -#: ../ProjectController.py:1691 +#: ../ProjectController.py:1773 msgid "Connection canceled!\n" msgstr "" -#: ../ProjectController.py:1714 +#: ../ProjectController.py:1797 #, python-format msgid "Connection failed to %s!\n" msgstr "" -#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120 +#: ../connectors/PYRO/__init__.py:124 ../connectors/WAMP/__init__.py:121 msgid "Connection lost!\n" msgstr "" -#: ../connectors/PYRO/__init__.py:110 +#: ../connectors/PYRO/__init__.py:111 #, python-format msgid "Connection to '%s' failed.\n" msgstr "" -#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676 +#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1678 msgid "Connector" msgstr "" @@ -1045,7 +1164,7 @@ msgid "Connectors:" msgstr "" -#: ../BeremizIDE.py:378 +#: ../BeremizIDE.py:374 msgid "Console" msgstr "" @@ -1053,18 +1172,22 @@ msgid "Constant" msgstr "" -#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444 +#: ../editors/Viewer.py:637 ../editors/Viewer.py:2446 msgid "Contact" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:217 +#: ../controls/ProjectPropertiesPanel.py:219 msgid "Content Description (optional):" msgstr "" -#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677 +#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1679 msgid "Continuation" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Control Byte" +msgstr "" + #: ../plcopen/iec_std.csv:18 msgid "Conversion from BCD" msgstr "" @@ -1081,20 +1204,20 @@ msgid "Conversion to time-of-day" msgstr "" -#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372 -#: ../IDEFrame.py:427 +#: ../editors/Viewer.py:698 ../controls/LogViewer.py:713 ../IDEFrame.py:375 +#: ../IDEFrame.py:428 msgid "Copy" msgstr "" -#: ../IDEFrame.py:1964 +#: ../IDEFrame.py:1981 msgid "Copy POU" msgstr "" -#: ../editors/FileManagementPanel.py:68 +#: ../editors/FileManagementPanel.py:67 msgid "Copy file from left folder to right" msgstr "" -#: ../editors/FileManagementPanel.py:67 +#: ../editors/FileManagementPanel.py:66 msgid "Copy file from right folder to left" msgstr "" @@ -1114,6 +1237,16 @@ msgid "Couldn't import old %s file." msgstr "" +#: ../etherlab/EthercatMaster.py:258 +#, python-format +msgid "Couldn't load %s network configuration file." +msgstr "" + +#: ../etherlab/EthercatMaster.py:279 +#, python-format +msgid "Couldn't load %s network process variables file." +msgstr "" + #: ../ConfigTreeNode.py:630 #, python-brace-format msgid "" @@ -1128,15 +1261,22 @@ " {a2}" msgstr "" +#: ../etherlab/etherlab.py:264 +#, python-brace-format +msgid "" +"Couldn't load {a1} XML file:\n" +"{a2}" +msgstr "" + #: ../PLCControler.py:552 msgid "Couldn't paste non-POU object." msgstr "" -#: ../ProjectController.py:1636 +#: ../ProjectController.py:1717 msgid "Couldn't start PLC !\n" msgstr "" -#: ../ProjectController.py:1644 +#: ../ProjectController.py:1725 msgid "Couldn't stop PLC !\n" msgstr "" @@ -1144,43 +1284,43 @@ msgid "Create HMI" msgstr "" -#: ../dialogs/PouDialog.py:54 +#: ../dialogs/PouDialog.py:48 msgid "Create a new POU" msgstr "" -#: ../dialogs/PouActionDialog.py:45 +#: ../dialogs/PouActionDialog.py:42 msgid "Create a new action" msgstr "" -#: ../IDEFrame.py:166 +#: ../IDEFrame.py:313 msgid "Create a new action block" msgstr "" -#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178 +#: ../IDEFrame.py:262 ../IDEFrame.py:292 ../IDEFrame.py:325 msgid "Create a new block" msgstr "" -#: ../IDEFrame.py:139 +#: ../IDEFrame.py:286 msgid "Create a new branch" msgstr "" -#: ../IDEFrame.py:133 +#: ../IDEFrame.py:280 msgid "Create a new coil" msgstr "" -#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154 +#: ../IDEFrame.py:256 ../IDEFrame.py:271 ../IDEFrame.py:301 msgid "Create a new comment" msgstr "" -#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181 +#: ../IDEFrame.py:265 ../IDEFrame.py:295 ../IDEFrame.py:328 msgid "Create a new connection" msgstr "" -#: ../IDEFrame.py:136 ../IDEFrame.py:187 +#: ../IDEFrame.py:283 ../IDEFrame.py:334 msgid "Create a new contact" msgstr "" -#: ../IDEFrame.py:169 +#: ../IDEFrame.py:316 msgid "Create a new divergence" msgstr "" @@ -1188,43 +1328,55 @@ msgid "Create a new divergence or convergence" msgstr "" -#: ../IDEFrame.py:157 +#: ../IDEFrame.py:304 msgid "Create a new initial step" msgstr "" -#: ../IDEFrame.py:172 +#: ../IDEFrame.py:319 msgid "Create a new jump" msgstr "" -#: ../IDEFrame.py:127 ../IDEFrame.py:184 +#: ../IDEFrame.py:274 ../IDEFrame.py:331 msgid "Create a new power rail" msgstr "" -#: ../IDEFrame.py:130 +#: ../IDEFrame.py:277 msgid "Create a new rung" msgstr "" -#: ../IDEFrame.py:160 +#: ../IDEFrame.py:307 msgid "Create a new step" msgstr "" -#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163 +#: ../dialogs/PouTransitionDialog.py:45 ../IDEFrame.py:310 msgid "Create a new transition" msgstr "" -#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175 +#: ../IDEFrame.py:259 ../IDEFrame.py:289 ../IDEFrame.py:322 msgid "Create a new variable" msgstr "" +#: ../etherlab/etherlab.py:183 +msgid "Creating new PDO" +msgstr "" + #: ../dialogs/AboutDialog.py:109 msgid "Credits" msgstr "" -#: ../Beremiz_service.py:424 +#: ../runtime/WampClient.py:400 +msgid "Current status" +msgstr "" + +#: ../Beremiz_service.py:437 msgid "Current working directory :" msgstr "" -#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426 +#: ../runtime/WampClient.py:161 +msgid "Custom protocol options failed :" +msgstr "" + +#: ../editors/Viewer.py:697 ../IDEFrame.py:373 ../IDEFrame.py:427 msgid "Cut" msgstr "" @@ -1273,11 +1425,11 @@ msgid "Date subtraction" msgstr "" -#: ../dialogs/DurationEditorDialog.py:46 +#: ../dialogs/DurationEditorDialog.py:57 msgid "Days:" msgstr "" -#: ../ProjectController.py:1729 +#: ../ProjectController.py:1809 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n" msgstr "" @@ -1285,42 +1437,51 @@ msgid "Debug instance" msgstr "" -#: ../editors/Viewer.py:490 +#: ../editors/Viewer.py:493 #, python-format msgid "Debug: %s" msgstr "" -#: ../ProjectController.py:1471 +#: ../ProjectController.py:1548 #, python-format msgid "Debug: Unknown variable '%s'\n" msgstr "" -#: ../ProjectController.py:1469 +#: ../ProjectController.py:1545 #, python-format msgid "Debug: Unsupported type to debug '%s'\n" msgstr "" -#: ../IDEFrame.py:660 +#: ../IDEFrame.py:666 msgid "Debugger" msgstr "" -#: ../ProjectController.py:1726 +#: ../ProjectController.py:1805 msgid "Debugger ready\n" msgstr "" -#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993 +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Default Size" +msgstr "" + +#: ../etherlab/EthercatCFileGenerator.py:174 +#, python-format +msgid "Definition conflict for location \"%s\"" +msgstr "" + +#: ../BeremizIDE.py:1001 ../editors/Viewer.py:673 ../IDEFrame.py:2010 msgid "Delete" msgstr "" -#: ../editors/Viewer.py:610 +#: ../editors/Viewer.py:613 msgid "Delete Divergence Branch" msgstr "" -#: ../editors/FileManagementPanel.py:157 +#: ../etherlab/ConfigEditor.py:1261 ../editors/FileManagementPanel.py:156 msgid "Delete File" msgstr "" -#: ../editors/Viewer.py:597 +#: ../editors/Viewer.py:600 msgid "Delete Wire Segment" msgstr "" @@ -1336,11 +1497,12 @@ msgid "Derivation Type:" msgstr "" -#: ../editors/CodeFileEditor.py:735 +#: ../etherlab/ConfigEditor.py:346 ../etherlab/ConfigEditor.py:465 +#: ../editors/CodeFileEditor.py:754 msgid "Description" msgstr "" -#: ../controls/VariablePanel.py:463 +#: ../controls/VariablePanel.py:465 msgid "Description:" msgstr "" @@ -1352,7 +1514,7 @@ msgid "Direction" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:102 +#: ../dialogs/BrowseLocationsDialog.py:101 msgid "Direction:" msgstr "" @@ -1360,19 +1522,19 @@ msgid "Directly" msgstr "" -#: ../ProjectController.py:1855 +#: ../ProjectController.py:1938 msgid "Disconnect" msgstr "" -#: ../ProjectController.py:1856 +#: ../ProjectController.py:1939 msgid "Disconnect from PLC" msgstr "" -#: ../ProjectController.py:1401 +#: ../runtime/PlcStatus.py:14 msgid "Disconnected" msgstr "" -#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436 +#: ../editors/Viewer.py:657 ../editors/Viewer.py:2438 msgid "Divergence" msgstr "" @@ -1380,7 +1542,7 @@ msgid "Division" msgstr "" -#: ../editors/FileManagementPanel.py:156 +#: ../etherlab/ConfigEditor.py:1260 ../editors/FileManagementPanel.py:155 #, python-format msgid "Do you really want to delete the file '%s'?" msgstr "" @@ -1393,15 +1555,31 @@ msgid "Done" msgstr "" +#: ../runtime/WampClient.py:384 +msgid "Download" +msgstr "" + #: ../dialogs/ActionBlockDialog.py:42 msgid "Duration" msgstr "" +#: ../bacnet/bacnet.py:437 +msgid "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*" +msgstr "" + #: ../canfestival/canfestival.py:174 msgid "EDS files (*.eds)|*.eds|All files|*.*" msgstr "" -#: ../editors/Viewer.py:668 +#: ../etherlab/ConfigEditor.py:1342 +msgid "ESI Files Database management" +msgstr "" + +#: ../etherlab/ConfigEditor.py:1109 +msgid "ESI Files:" +msgstr "" + +#: ../editors/Viewer.py:671 msgid "Edit Block" msgstr "" @@ -1413,7 +1591,7 @@ msgid "Edit Contact Values" msgstr "" -#: ../dialogs/DurationEditorDialog.py:62 +#: ../dialogs/DurationEditorDialog.py:54 msgid "Edit Duration" msgstr "" @@ -1433,11 +1611,11 @@ msgid "Edit array type properties" msgstr "" -#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102 +#: ../dialogs/CommentEditDialog.py:53 msgid "Edit comment" msgstr "" -#: ../editors/FileManagementPanel.py:69 +#: ../editors/FileManagementPanel.py:68 msgid "Edit file" msgstr "" @@ -1445,11 +1623,11 @@ msgid "Edit item" msgstr "" -#: ../editors/Viewer.py:3059 +#: ../editors/Viewer.py:3058 msgid "Edit jump target" msgstr "" -#: ../ProjectController.py:1873 +#: ../ProjectController.py:1956 msgid "Edit raw IEC code added to code generated by PLCGenerator" msgstr "" @@ -1461,11 +1639,11 @@ msgid "Edit transition" msgstr "" -#: ../IDEFrame.py:632 +#: ../IDEFrame.py:638 msgid "Editor ToolBar" msgstr "" -#: ../ProjectController.py:1294 +#: ../ProjectController.py:1355 msgid "Editor selection" msgstr "" @@ -1473,7 +1651,7 @@ msgid "Elements :" msgstr "" -#: ../ProjectController.py:1399 +#: ../runtime/PlcStatus.py:15 msgid "Empty" msgstr "" @@ -1481,18 +1659,43 @@ msgid "Empty dimension isn't allowed." msgstr "" -#: ../Beremiz_service.py:341 +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Enable" +msgstr "" + +#: ../runtime/WampClient.py:410 +msgid "Enable WAMP connection" +msgstr "" + +#: ../Beremiz_service.py:354 msgid "Enter a name " msgstr "" -#: ../Beremiz_service.py:326 +#: ../Beremiz_service.py:339 msgid "Enter a port number " msgstr "" -#: ../Beremiz_service.py:317 +#: ../etherlab/EtherCATManagementEditor.py:627 +msgid "Enter hex or dec value (if enter dec value, it automatically conversed hex value)" +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:1964 +msgid "Enter hex(0xnnnn) or dec(n) value" +msgstr "" + +#: ../Beremiz_service.py:330 msgid "Enter the IP of the interface to bind" msgstr "" +#: ../etherlab/ConfigEditor.py:502 +msgid "Entry can't be write through SDO" +msgstr "" + +#: ../etherlab/EthercatCFileGenerator.py:569 +#, python-brace-format +msgid "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}" +msgstr "" + #: ../editors/DataTypeEditor.py:60 msgid "Enumerated" msgstr "" @@ -1503,42 +1706,45 @@ #: ../dialogs/ForceVariableDialog.py:213 #: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64 -#: ../dialogs/DurationEditorDialog.py:124 -#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114 -#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80 +#: ../dialogs/DurationEditorDialog.py:125 +#: ../dialogs/DurationEditorDialog.py:172 ../dialogs/PouTransitionDialog.py:113 +#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78 #: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58 -#: ../dialogs/BrowseLocationsDialog.py:229 +#: ../dialogs/BrowseLocationsDialog.py:228 #: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112 -#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 -#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467 -#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893 -#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566 -#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590 -#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766 -#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760 -#: ../ProjectController.py:391 ../ProjectController.py:531 -#: ../ProjectController.py:538 ../controls/FolderTree.py:222 -#: ../controls/ProjectPropertiesPanel.py:306 -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173 +#: ../dialogs/PouDialog.py:178 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324 +#: ../etherlab/ConfigEditor.py:458 ../etherlab/ConfigEditor.py:510 +#: ../etherlab/ConfigEditor.py:981 ../etherlab/ConfigEditor.py:1047 +#: ../etherlab/ConfigEditor.py:1246 ../etherlab/ConfigEditor.py:1314 +#: ../etherlab/EthercatMaster.py:463 ../editors/ResourceEditor.py:468 +#: ../editors/Viewer.py:467 ../editors/LDViewer.py:677 +#: ../editors/LDViewer.py:893 ../editors/LDViewer.py:897 +#: ../editors/DataTypeEditor.py:566 ../editors/DataTypeEditor.py:571 +#: ../editors/DataTypeEditor.py:590 ../editors/DataTypeEditor.py:759 +#: ../editors/DataTypeEditor.py:766 ../editors/TextViewer.py:390 +#: ../editors/CodeFileEditor.py:779 ../ProjectController.py:404 +#: ../ProjectController.py:548 ../ProjectController.py:557 +#: ../controls/FolderTree.py:222 ../controls/ProjectPropertiesPanel.py:308 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:163 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227 -#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773 -#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650 -#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710 -#: ../IDEFrame.py:1715 ../Beremiz_service.py:221 +#: ../controls/VariablePanel.py:430 ../controls/VariablePanel.py:784 +#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1049 ../IDEFrame.py:1667 +#: ../IDEFrame.py:1708 ../IDEFrame.py:1713 ../IDEFrame.py:1727 +#: ../IDEFrame.py:1732 ../Beremiz_service.py:234 msgid "Error" msgstr "" -#: ../ProjectController.py:811 +#: ../ProjectController.py:848 msgid "Error : At least one configuration and one resource must be declared in PLC !\n" msgstr "" -#: ../ProjectController.py:803 +#: ../ProjectController.py:838 #, python-format msgid "Error : IEC to C compiler returned %d\n" msgstr "" -#: ../ProjectController.py:731 +#: ../ProjectController.py:762 #, python-format msgid "" "Error in ST/IL/SFC code generator :\n" @@ -1550,7 +1756,17 @@ msgid "Error while saving \"%s\"\n" msgstr "" -#: ../canfestival/canfestival.py:179 +#: ../bacnet/bacnet.py:581 +#, python-brace-format +msgid "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n" +msgstr "" + +#: ../bacnet/bacnet.py:573 +#, python-brace-format +msgid "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n" +msgstr "" + +#: ../canfestival/canfestival.py:179 ../bacnet/bacnet.py:444 msgid "Error: Export slave failed\n" msgstr "" @@ -1567,7 +1783,23 @@ msgid "Error: No PLC built\n" msgstr "" -#: ../ProjectController.py:1708 +#: ../etherlab/ConfigEditor.py:269 +msgid "EtherCAT Management" +msgstr "" + +#: ../features.py:20 +msgid "EtherCAT master" +msgstr "" + +#: ../etherlab/EthercatMaster.py:302 +msgid "Ethercat Slave Type" +msgstr "" + +#: ../etherlab/ConfigEditor.py:267 +msgid "Ethercat node" +msgstr "" + +#: ../ProjectController.py:1791 #, python-format msgid "Exception while connecting %s!\n" msgstr "" @@ -1576,11 +1808,11 @@ msgid "Execution Control:" msgstr "" -#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111 +#: ../dialogs/FBDVariableDialog.py:85 ../dialogs/FBDBlockDialog.py:111 msgid "Execution Order:" msgstr "" -#: ../features.py:36 +#: ../features.py:25 msgid "Experimental web based HMI" msgstr "" @@ -1592,44 +1824,48 @@ msgid "Exponentiation" msgstr "" +#: ../bacnet/bacnet.py:156 +msgid "Export BACnet slave to EDE file" +msgstr "" + #: ../canfestival/canfestival.py:186 msgid "Export CanOpen slave to EDS file" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243 msgid "Export graph values to clipboard" msgstr "" -#: ../canfestival/canfestival.py:185 +#: ../canfestival/canfestival.py:185 ../bacnet/bacnet.py:155 msgid "Export slave" msgstr "" -#: ../dialogs/FBDVariableDialog.py:94 +#: ../dialogs/FBDVariableDialog.py:95 msgid "Expression:" msgstr "" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid "External" msgstr "" -#: ../ProjectController.py:826 +#: ../ProjectController.py:866 msgid "Extracting Located Variables...\n" msgstr "" #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "FBD" msgstr "" -#: ../ProjectController.py:1773 +#: ../ProjectController.py:1855 msgid "Failed : Must build before transfer.\n" msgstr "" -#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:559 msgid "Falling Edge" msgstr "" -#: ../ProjectController.py:1098 +#: ../ProjectController.py:1145 msgid "Fatal : cannot get builder.\n" msgstr "" @@ -1638,12 +1874,12 @@ msgid "Fetching %s" msgstr "" -#: ../dialogs/DurationEditorDialog.py:167 +#: ../dialogs/DurationEditorDialog.py:169 #, python-format msgid "Field %s hasn't a valid value!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:169 +#: ../dialogs/DurationEditorDialog.py:171 #, python-format msgid "Fields %s haven't a valid value!" msgstr "" @@ -1653,16 +1889,20 @@ msgid "File '%s' already exists!" msgstr "" +#: ../runtime/WampClient.py:407 +msgid "File containing secret for that ID" +msgstr "" + #: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40 -#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377 +#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:380 msgid "Find" msgstr "" -#: ../IDEFrame.py:379 +#: ../IDEFrame.py:382 msgid "Find Next" msgstr "" -#: ../IDEFrame.py:381 +#: ../IDEFrame.py:384 msgid "Find Previous" msgstr "" @@ -1674,7 +1914,7 @@ msgid "Find:" msgstr "" -#: ../editors/Viewer.py:1633 +#: ../editors/Viewer.py:1635 msgid "Force value" msgstr "" @@ -1682,9 +1922,9 @@ msgid "Forcing Variable Value" msgstr "" -#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104 -#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102 -#: ../dialogs/PouDialog.py:125 +#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:103 +#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:102 +#: ../dialogs/PouDialog.py:160 #, python-format msgid "Form isn't complete. %s must be filled!" msgstr "" @@ -1702,20 +1942,24 @@ msgid "Forward" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780 +#: ../IDEFrame.py:455 +msgid "Full screen" +msgstr "" + +#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1797 msgid "Function" msgstr "" -#: ../IDEFrame.py:354 +#: ../IDEFrame.py:357 msgid "Function &Block" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779 -#: ../IDEFrame.py:1972 +#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1796 +#: ../IDEFrame.py:1989 msgid "Function Block" msgstr "" -#: ../controls/VariablePanel.py:868 +#: ../controls/VariablePanel.py:879 msgid "Function Block Types" msgstr "" @@ -1740,19 +1984,19 @@ msgid "Generate Program" msgstr "" -#: ../ProjectController.py:722 +#: ../ProjectController.py:750 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n" msgstr "" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid "Global" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242 msgid "Go to current value" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:189 +#: ../controls/ProjectPropertiesPanel.py:192 msgid "Graphics" msgstr "" @@ -1764,32 +2008,36 @@ msgid "Greater than or equal to" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:149 +#: ../controls/ProjectPropertiesPanel.py:152 msgid "Grid Resolution:" msgstr "" -#: ../runtime/NevowServer.py:192 +#: ../runtime/NevowServer.py:313 msgid "HTTP interface port :" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:135 +#: ../controls/ProjectPropertiesPanel.py:138 msgid "Height:" msgstr "" -#: ../editors/FileManagementPanel.py:89 +#: ../editors/FileManagementPanel.py:88 msgid "Home Directory:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:165 +#: ../controls/ProjectPropertiesPanel.py:168 msgid "Horizontal:" msgstr "" -#: ../dialogs/DurationEditorDialog.py:47 +#: ../dialogs/DurationEditorDialog.py:58 msgid "Hours:" msgstr "" +#: ../runtime/WampClient.py:404 +msgid "ID" +msgstr "" + #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 +#: ../dialogs/PouDialog.py:128 msgid "IL" msgstr "" @@ -1797,52 +2045,64 @@ msgid "IP" msgstr "" -#: ../Beremiz_service.py:318 ../Beremiz_service.py:320 +#: ../Beremiz_service.py:331 ../Beremiz_service.py:333 msgid "IP is not valid!" msgstr "" +#: ../etherlab/ConfigEditor.py:1387 +msgid "Import ESI file" +msgstr "" + #: ../svgui/svgui.py:50 ../svgui/svgui.py:51 msgid "Import SVG" msgstr "" -#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662 -#: ../controls/VariablePanel.py:89 +#: ../etherlab/ConfigEditor.py:1352 +msgid "Import file to ESI files database" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:64 ../editors/Viewer.py:1664 +#: ../controls/VariablePanel.py:86 msgid "InOut" msgstr "" -#: ../PLCGenerator.py:1040 +#: ../PLCGenerator.py:1089 #, python-brace-format msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected." msgstr "" -#: ../editors/Viewer.py:473 +#: ../editors/Viewer.py:484 msgid "Inactive" msgstr "" -#: ../controls/VariablePanel.py:300 +#: ../controls/VariablePanel.py:299 #, python-brace-format msgid "Incompatible data types between \"{a1}\" and \"{a2}\"" msgstr "" -#: ../controls/VariablePanel.py:306 +#: ../controls/VariablePanel.py:305 #, python-format msgid "Incompatible size of data between \"%s\" and \"BOOL\"" msgstr "" -#: ../controls/VariablePanel.py:310 +#: ../controls/VariablePanel.py:309 #, python-brace-format msgid "Incompatible size of data between \"{a1}\" and \"{a2}\"" msgstr "" +#: ../etherlab/ConfigEditor.py:48 ../etherlab/ConfigEditor.py:465 +msgid "Index" +msgstr "" + #: ../dialogs/ActionBlockDialog.py:42 msgid "Indicator" msgstr "" -#: ../editors/CodeFileEditor.py:734 +#: ../editors/CodeFileEditor.py:753 msgid "Initial" msgstr "" -#: ../editors/Viewer.py:650 +#: ../editors/Viewer.py:653 msgid "Initial Step" msgstr "" @@ -1855,6 +2115,14 @@ msgid "Initial Value:" msgstr "" +#: ../etherlab/EthercatCIA402Slave.py:119 +msgid "Initiate Drag'n drop of Axis ref located variable" +msgstr "" + +#: ../etherlab/EthercatCIA402Slave.py:126 +msgid "Initiate Drag'n drop of Network position located variable" +msgstr "" + #: ../svgui/svgui.py:56 msgid "Inkscape" msgstr "" @@ -1863,11 +2131,11 @@ msgid "Inline" msgstr "" -#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40 +#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:63 #: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333 -#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../editors/Viewer.py:1662 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Input" msgstr "" @@ -1884,11 +2152,11 @@ msgid "Instance with id %d doesn't exist!" msgstr "" -#: ../editors/ResourceEditor.py:279 +#: ../editors/ResourceEditor.py:277 msgid "Instances:" msgstr "" -#: ../controls/VariablePanel.py:88 +#: ../controls/VariablePanel.py:85 msgid "Interface" msgstr "" @@ -1900,7 +2168,7 @@ msgid "Interval" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:304 +#: ../controls/ProjectPropertiesPanel.py:306 msgid "" "Invalid URL!\n" "Please enter correct URL address." @@ -1920,14 +2188,26 @@ msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\"" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:129 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162 #, python-format msgid "Invalid value \"%s\" for debug variable" msgstr "" -#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282 +#: ../etherlab/ConfigEditor.py:418 ../etherlab/ConfigEditor.py:421 +#: ../etherlab/ConfigEditor.py:452 +#, python-format +msgid "Invalid value \"%s\" for process variable" +msgstr "" + +#: ../etherlab/ConfigEditor.py:480 ../etherlab/ConfigEditor.py:483 +#: ../etherlab/ConfigEditor.py:504 +#, python-format +msgid "Invalid value \"%s\" for startup command" +msgstr "" + +#: ../controls/VariablePanel.py:278 ../controls/VariablePanel.py:281 #, python-format msgid "Invalid value \"%s\" for variable grid element" msgstr "" @@ -1942,7 +2222,12 @@ msgid "Invalid value \"{a1}\" for \"{a2}\" variable!" msgstr "" -#: ../dialogs/DurationEditorDialog.py:124 +#: ../etherlab/CommonEtherCATFunction.py:31 +#, python-format +msgid "Invalid value for HexDecValue \"%s\"" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:125 msgid "" "Invalid value!\n" "You must fill a numeric value." @@ -1952,12 +2237,12 @@ msgid "Is connection secure?" msgstr "" -#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425 +#: ../editors/Viewer.py:658 ../editors/Viewer.py:2427 msgid "Jump" msgstr "" #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "LD" msgstr "" @@ -1966,33 +2251,33 @@ msgid "Ladder element with id %d is on more than one rung." msgstr "" -#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91 -#: ../dialogs/PouDialog.py:113 +#: ../dialogs/PouTransitionDialog.py:92 ../dialogs/PouActionDialog.py:91 +#: ../dialogs/PouDialog.py:148 msgid "Language" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:206 +#: ../controls/ProjectPropertiesPanel.py:208 msgid "Language (optional):" msgstr "" -#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63 -#: ../dialogs/PouDialog.py:81 +#: ../dialogs/PouTransitionDialog.py:66 ../dialogs/PouActionDialog.py:63 +#: ../dialogs/PouDialog.py:79 msgid "Language:" msgstr "" -#: ../ProjectController.py:1779 +#: ../ProjectController.py:1861 msgid "Latest build already matches current target. Transfering anyway...\n" msgstr "" -#: ../Beremiz_service.py:281 +#: ../Beremiz_service.py:294 msgid "Launch WX GUI inspector" msgstr "" -#: ../Beremiz_service.py:280 +#: ../Beremiz_service.py:293 msgid "Launch a live Python shell" msgstr "" -#: ../editors/Viewer.py:580 +#: ../editors/Viewer.py:583 msgid "Left" msgstr "" @@ -2012,7 +2297,7 @@ msgid "Less than or equal to" msgstr "" -#: ../IDEFrame.py:652 +#: ../IDEFrame.py:658 msgid "Library" msgstr "" @@ -2028,7 +2313,7 @@ msgid "Linking :\n" msgstr "" -#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90 +#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:87 msgid "Local" msgstr "" @@ -2036,7 +2321,7 @@ msgid "Local entries" msgstr "" -#: ../ProjectController.py:1685 +#: ../ProjectController.py:1767 msgid "Local service discovery failed!\n" msgstr "" @@ -2044,28 +2329,44 @@ msgid "Location" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:79 +#: ../dialogs/BrowseLocationsDialog.py:78 msgid "Locations available:" msgstr "" +#: ../runtime/NevowServer.py:175 +msgid "Log message level" +msgstr "" + #: ../plcopen/iec_std.csv:25 msgid "Logarithm to base 10" msgstr "" -#: ../connectors/PYRO/__init__.py:102 +#: ../connectors/PYRO/__init__.py:103 #, python-format msgid "MDNS resolution failure for '%s'\n" msgstr "" +#: ../etherlab/ConfigEditor.py:67 +msgid "Manufacturer Specific" +msgstr "" + #: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92 msgid "Map Variable" msgstr "" -#: ../features.py:31 +#: ../features.py:19 +msgid "Map located variables over Bacnet" +msgstr "" + +#: ../features.py:18 msgid "Map located variables over CANopen" msgstr "" -#: ../features.py:32 +#: ../features.py:20 +msgid "Map located variables over EtherCAT" +msgstr "" + +#: ../features.py:21 msgid "Map located variables over Modbus" msgstr "" @@ -2073,11 +2374,25 @@ msgid "Master" msgstr "" +#: ../etherlab/ConfigEditor.py:613 +msgid "Master State" +msgstr "" + #: ../ConfigTreeNode.py:544 #, python-brace-format msgid "Max count ({a1}) reached for this confnode of type {a2} " msgstr "" +#: ../etherlab/etherlab.py:173 +msgid "Max entries by PDO" +msgstr "" + +#: ../etherlab/etherlab.py:176 +msgid "" +"Maximal number of entries mapped in a PDO\n" +"including empty entries used for PDO alignment" +msgstr "" + #: ../plcopen/iec_std.csv:71 msgid "Maximum" msgstr "" @@ -2088,26 +2403,34 @@ #: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333 #: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Memory" msgstr "" -#: ../IDEFrame.py:617 +#: ../IDEFrame.py:623 msgid "Menu ToolBar" msgstr "" -#: ../dialogs/DurationEditorDialog.py:51 +#: ../runtime/NevowServer.py:176 +msgid "Message text" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:62 msgid "Microseconds:" msgstr "" -#: ../editors/Viewer.py:585 +#: ../editors/Viewer.py:588 msgid "Middle" msgstr "" -#: ../dialogs/DurationEditorDialog.py:50 +#: ../dialogs/DurationEditorDialog.py:61 msgid "Milliseconds:" msgstr "" +#: ../etherlab/etherlab.py:167 +msgid "Minimal size in bits between 2 pdo entries" +msgstr "" + #: ../plcopen/iec_std.csv:72 msgid "Minimum" msgstr "" @@ -2116,15 +2439,15 @@ msgid "Minimum:" msgstr "" -#: ../dialogs/DurationEditorDialog.py:48 +#: ../dialogs/DurationEditorDialog.py:59 msgid "Minutes:" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:231 +#: ../etherlab/etherlab.py:238 ../controls/ProjectPropertiesPanel.py:233 msgid "Miscellaneous" msgstr "" -#: ../features.py:32 +#: ../features.py:21 msgid "Modbus support" msgstr "" @@ -2132,7 +2455,20 @@ msgid "Modifier:" msgstr "" -#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269 +#: ../etherlab/ConfigEditor.py:1313 +#, python-format +msgid "Module %s must be an integer!" +msgstr "" + +#: ../etherlab/ConfigEditor.py:1376 +msgid "Modules Library" +msgstr "" + +#: ../etherlab/ConfigEditor.py:1145 +msgid "Modules library:" +msgstr "" + +#: ../PLCGenerator.py:795 ../PLCGenerator.py:1318 #, python-brace-format msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" @@ -2157,23 +2493,31 @@ msgid "Move element up" msgstr "" -#: ../editors/ResourceEditor.py:286 +#: ../editors/ResourceEditor.py:284 msgid "Move instance down" msgstr "" -#: ../editors/ResourceEditor.py:285 +#: ../editors/ResourceEditor.py:283 msgid "Move instance up" msgstr "" -#: ../editors/ResourceEditor.py:255 +#: ../etherlab/ConfigEditor.py:655 +msgid "Move process variable down" +msgstr "" + +#: ../etherlab/ConfigEditor.py:654 +msgid "Move process variable up" +msgstr "" + +#: ../editors/ResourceEditor.py:253 msgid "Move task down" msgstr "" -#: ../editors/ResourceEditor.py:254 +#: ../editors/ResourceEditor.py:252 msgid "Move task up" msgstr "" -#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192 +#: ../IDEFrame.py:253 ../IDEFrame.py:268 ../IDEFrame.py:298 ../IDEFrame.py:339 msgid "Move the view" msgstr "" @@ -2181,14 +2525,28 @@ msgid "Move up" msgstr "" -#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484 +#: ../bacnet/BacnetSlaveEditor.py:814 ../editors/CodeFileEditor.py:675 +#: ../controls/VariablePanel.py:486 msgid "Move variable down" msgstr "" -#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483 +#: ../bacnet/BacnetSlaveEditor.py:813 ../editors/CodeFileEditor.py:674 +#: ../controls/VariablePanel.py:485 msgid "Move variable up" msgstr "" +#: ../bacnet/BacnetSlaveEditor.py:941 +msgid "Multi-State Input Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:940 +msgid "Multi-State Output Objects" +msgstr "" + +#: ../bacnet/BacnetSlaveEditor.py:939 +msgid "Multi-State Value Objects" +msgstr "" + #: ../plcopen/iec_std.csv:74 msgid "Multiplexer (select 1 of N)" msgstr "" @@ -2197,7 +2555,7 @@ msgid "Multiplication" msgstr "" -#: ../editors/FileManagementPanel.py:87 +#: ../editors/FileManagementPanel.py:86 msgid "My Computer:" msgstr "" @@ -2205,13 +2563,15 @@ msgid "NAME" msgstr "" -#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97 -#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732 +#: ../etherlab/EtherCATManagementEditor.py:37 ../etherlab/ConfigEditor.py:48 +#: ../etherlab/ConfigEditor.py:343 ../etherlab/ConfigEditor.py:1167 +#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:94 +#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:751 #: ../controls/VariablePanel.py:59 msgid "Name" msgstr "" -#: ../Beremiz_service.py:342 +#: ../Beremiz_service.py:355 msgid "Name must not be null!" msgstr "" @@ -2224,15 +2584,19 @@ msgid "Natural logarithm" msgstr "" -#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554 +#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:557 msgid "Negated" msgstr "" -#: ../Beremiz_service.py:610 +#: ../etherlab/ConfigEditor.py:612 +msgid "Network" +msgstr "" + +#: ../Beremiz_service.py:620 msgid "Nevow Web service failed. " msgstr "" -#: ../Beremiz_service.py:580 +#: ../Beremiz_service.py:596 msgid "Nevow/Athena import failed :" msgstr "" @@ -2245,20 +2609,29 @@ msgid "New item" msgstr "" -#: ../editors/Viewer.py:553 +#: ../editors/Viewer.py:556 msgid "No Modifier" msgstr "" -#: ../ProjectController.py:1808 +#: ../ProjectController.py:1891 msgid "No PLC to transfer (did build succeed ?)\n" msgstr "" -#: ../PLCGenerator.py:1678 +#: ../etherlab/EthercatCFileGenerator.py:504 +#, python-format +msgid "No Sync manager defined for %s!" +msgstr "" + +#: ../PLCGenerator.py:1727 #, python-format msgid "No body defined in \"%s\" POU" msgstr "" -#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281 +#: ../etherlab/CommonEtherCATFunction.py:1581 +msgid "No connected slaves" +msgstr "" + +#: ../PLCGenerator.py:816 ../PLCGenerator.py:1330 #, python-brace-format msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU" msgstr "" @@ -2274,7 +2647,17 @@ msgid "No informations found for \"%s\" block" msgstr "" -#: ../PLCGenerator.py:1232 +#: ../etherlab/EthercatCFileGenerator.py:224 +#, python-format +msgid "No informations found for device %s!" +msgstr "" + +#: ../etherlab/EthercatCFileGenerator.py:515 +#, python-format +msgid "No more free PDO index available for %s!" +msgstr "" + +#: ../PLCGenerator.py:1281 #, python-brace-format msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken" msgstr "" @@ -2283,11 +2666,21 @@ msgid "No search results available." msgstr "" +#: ../etherlab/ConfigEditor.py:1029 +#, python-format +msgid "No slave defined at position %d!" +msgstr "" + #: ../svgui/svgui.py:142 #, python-format msgid "No such SVG file: %s\n" msgstr "" +#: ../etherlab/ConfigEditor.py:1245 +#, python-format +msgid "No such XML file: %s\n" +msgstr "" + #: ../canfestival/config_utils.py:682 #, python-brace-format msgid "No such index/subindex ({a1},{a2}) (variable {a3})" @@ -2298,15 +2691,33 @@ msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})" msgstr "" +#: ../etherlab/EthercatCFileGenerator.py:438 +#, python-format +msgid "No sync manager available for %s pdo!" +msgstr "" + #: ../dialogs/BrowseValuesLibraryDialog.py:87 msgid "No valid value selected!" msgstr "" -#: ../PLCGenerator.py:1676 +#: ../PLCGenerator.py:1725 #, python-format msgid "No variable defined in \"%s\" POU" msgstr "" +#: ../etherlab/ConfigEditor.py:606 +#, python-format +msgid "Node Position: %d" +msgstr "" + +#: ../etherlab/ConfigEditor.py:697 +msgid "Node filter:" +msgstr "" + +#: ../etherlab/ConfigEditor.py:717 +msgid "Nodes variables filter:" +msgstr "" + #: ../canfestival/config_utils.py:379 #, python-brace-format msgid "Non existing node ID : {a1} (variable {a2})" @@ -2329,6 +2740,10 @@ msgid "Not equal to" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:361 +msgid "Now Uploading..." +msgstr "" + #: ../dialogs/SFCDivergenceDialog.py:91 msgid "Number of sequences:" msgstr "" @@ -2337,7 +2752,11 @@ msgid "Numerical" msgstr "" -#: ../editors/CodeFileEditor.py:736 +#: ../bacnet/BacnetSlaveEditor.py:808 +msgid "Object Properties:" +msgstr "" + +#: ../editors/CodeFileEditor.py:755 msgid "OnChange" msgstr "" @@ -2354,15 +2773,15 @@ msgid "Open Inkscape" msgstr "" -#: ../version.py:86 +#: ../version.py:88 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime." msgstr "" -#: ../ProjectController.py:1879 +#: ../ProjectController.py:1962 msgid "Open a file explorer to manage project files" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:161 +#: ../wxglade_hmi/wxglade_hmi.py:176 msgid "Open wxGlade" msgstr "" @@ -2370,11 +2789,11 @@ msgid "Option" msgstr "" -#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737 +#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:756 msgid "Options" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:109 +#: ../controls/ProjectPropertiesPanel.py:111 msgid "Organization (optional):" msgstr "" @@ -2382,14 +2801,19 @@ msgid "Other Profile" msgstr "" -#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42 +#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:65 #: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333 -#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307 -#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89 -#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380 +#: ../editors/Viewer.py:1663 ../editors/TextViewer.py:307 +#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86 +#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379 msgid "Output" msgstr "" +#: ../etherlab/EthercatCFileGenerator.py:170 +#, python-brace-format +msgid "Output variables can't be defined with different locations ({a1} and {a2})" +msgstr "" + #: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91 msgid "PDO Receive" msgstr "" @@ -2398,26 +2822,39 @@ msgid "PDO Transmit" msgstr "" +#: ../etherlab/etherlab.py:164 +msgid "PDO alignment" +msgstr "" + #: ../targets/toolchain_gcc.py:174 msgid "PLC :\n" msgstr "" -#: ../BeremizIDE.py:383 +#: ../BeremizIDE.py:379 msgid "PLC Log" msgstr "" -#: ../ProjectController.py:1082 +#: ../ProjectController.py:1129 msgid "PLC code generation failed !\n" msgstr "" -#: ../Beremiz_service.py:305 +#: ../etherlab/EtherCATManagementEditor.py:250 +msgid "PLC is Not Started" +msgstr "" + +#: ../Beremiz_service.py:318 msgid "PLC is empty or already started." msgstr "" -#: ../Beremiz_service.py:312 +#: ../Beremiz_service.py:325 msgid "PLC is not started." msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:2160 +#: ../etherlab/CommonEtherCATFunction.py:1589 +msgid "PLC not connected!" +msgstr "" + #: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293 #, python-brace-format msgid "" @@ -2444,28 +2881,28 @@ msgid "PORT" msgstr "" -#: ../dialogs/PouDialog.py:109 +#: ../dialogs/PouDialog.py:144 msgid "POU Name" msgstr "" -#: ../dialogs/PouDialog.py:66 +#: ../dialogs/PouDialog.py:64 msgid "POU Name:" msgstr "" -#: ../dialogs/PouDialog.py:111 +#: ../dialogs/PouDialog.py:146 msgid "POU Type" msgstr "" -#: ../dialogs/PouDialog.py:73 +#: ../dialogs/PouDialog.py:71 msgid "POU Type:" msgstr "" -#: ../connectors/PYRO/__init__.py:52 +#: ../connectors/PYRO/__init__.py:53 #, python-format msgid "PYRO connecting to URI : %s\n" msgstr "" -#: ../connectors/PYRO/__init__.py:68 +#: ../connectors/PYRO/__init__.py:69 #, python-format msgid "PYRO using certificates in '%s' \n" msgstr "" @@ -2474,11 +2911,11 @@ msgid "Page Setup" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:124 +#: ../controls/ProjectPropertiesPanel.py:127 msgid "Page Size (optional):" msgstr "" -#: ../IDEFrame.py:2640 +#: ../IDEFrame.py:2660 #, python-format msgid "Page: %d" msgstr "" @@ -2487,11 +2924,11 @@ msgid "Parent instance" msgstr "" -#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428 +#: ../editors/Viewer.py:699 ../IDEFrame.py:377 ../IDEFrame.py:429 msgid "Paste" msgstr "" -#: ../IDEFrame.py:1899 +#: ../IDEFrame.py:1916 msgid "Paste POU" msgstr "" @@ -2503,7 +2940,11 @@ msgid "Pin number:" msgstr "" -#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060 +#: ../runtime/NevowServer.py:163 +msgid "Platform" +msgstr "" + +#: ../editors/Viewer.py:2791 ../editors/Viewer.py:3059 #: ../editors/SFCViewer.py:785 msgid "Please choose a target" msgstr "" @@ -2512,7 +2953,7 @@ msgid "Please enter a block name" msgstr "" -#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103 +#: ../dialogs/CommentEditDialog.py:52 msgid "Please enter comment text" msgstr "" @@ -2521,7 +2962,8 @@ msgid "Please enter step name" msgstr "" -#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209 +#: ../dialogs/SFCStepNameDialog.py:37 ../dialogs/PouNameDialog.py:37 +#: ../Beremiz_service.py:222 msgid "Please enter text" msgstr "" @@ -2530,15 +2972,19 @@ msgid "Please enter value for a \"%s\" variable:" msgstr "" -#: ../Beremiz_service.py:327 +#: ../Beremiz_service.py:340 msgid "Port number must be 0 <= port <= 65535!" msgstr "" -#: ../Beremiz_service.py:327 +#: ../Beremiz_service.py:340 msgid "Port number must be an integer!" msgstr "" -#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449 +#: ../etherlab/ConfigEditor.py:47 ../etherlab/ConfigEditor.py:465 +msgid "Position" +msgstr "" + +#: ../editors/Viewer.py:636 ../editors/Viewer.py:2451 msgid "Power Rail" msgstr "" @@ -2559,7 +3005,7 @@ msgid "Print" msgstr "" -#: ../IDEFrame.py:1110 +#: ../IDEFrame.py:1123 msgid "Print preview" msgstr "" @@ -2571,33 +3017,37 @@ msgid "Priority:" msgstr "" -#: ../runtime/PLCObject.py:518 +#: ../runtime/PLCObject.py:523 #, python-format msgid "Problem starting PLC : error %d" msgstr "" -#: ../dialogs/ProjectDialog.py:63 +#: ../etherlab/ConfigEditor.py:647 +msgid "Process variables mapped between nodes:" +msgstr "" + +#: ../dialogs/ProjectDialog.py:61 msgid "Product Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:90 +#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Name (required):" msgstr "" +#: ../controls/ProjectPropertiesPanel.py:93 +msgid "Product Release (optional):" +msgstr "" + +#: ../dialogs/ProjectDialog.py:62 +msgid "Product Version" +msgstr "" + #: ../controls/ProjectPropertiesPanel.py:92 -msgid "Product Release (optional):" -msgstr "" - -#: ../dialogs/ProjectDialog.py:64 -msgid "Product Version" -msgstr "" - -#: ../controls/ProjectPropertiesPanel.py:91 msgid "Product Version (required):" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778 -#: ../IDEFrame.py:1975 +#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1795 +#: ../IDEFrame.py:1992 msgid "Program" msgstr "" @@ -2613,7 +3063,7 @@ msgid "Programs can't be used by other POUs!" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601 +#: ../controls/ProjectPropertiesPanel.py:95 ../IDEFrame.py:607 msgid "Project" msgstr "" @@ -2622,19 +3072,19 @@ msgid "Project '%s':" msgstr "" -#: ../ProjectController.py:1878 +#: ../ProjectController.py:1961 msgid "Project Files" msgstr "" -#: ../dialogs/ProjectDialog.py:62 +#: ../dialogs/ProjectDialog.py:60 msgid "Project Name" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:88 +#: ../controls/ProjectPropertiesPanel.py:89 msgid "Project Name (required):" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:89 +#: ../controls/ProjectPropertiesPanel.py:90 msgid "Project Version (optional):" msgstr "" @@ -2661,16 +3111,16 @@ msgid "Properties" msgstr "" -#: ../Beremiz_service.py:427 +#: ../Beremiz_service.py:440 msgid "Publishing service on local network" msgstr "" -#: ../connectors/PYRO/__init__.py:126 +#: ../connectors/PYRO/__init__.py:127 #, python-format msgid "Pyro exception: %s\n" msgstr "" -#: ../Beremiz_service.py:420 +#: ../Beremiz_service.py:433 msgid "Pyro port :" msgstr "" @@ -2678,7 +3128,7 @@ msgid "Python code" msgstr "" -#: ../features.py:34 +#: ../features.py:23 msgid "Python file" msgstr "" @@ -2686,19 +3136,23 @@ msgid "Qualifier" msgstr "" -#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283 +#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:296 msgid "Quit" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224 msgid "Range:" msgstr "" -#: ../ProjectController.py:1872 +#: ../ProjectController.py:1955 msgid "Raw IEC code" msgstr "" -#: ../BeremizIDE.py:1083 +#: ../etherlab/ConfigEditor.py:344 +msgid "Read from (nodeid, index, subindex)" +msgstr "" + +#: ../BeremizIDE.py:1080 #, python-format msgid "Really delete node '%s'?" msgstr "" @@ -2707,7 +3161,7 @@ msgid "Realm:" msgstr "" -#: ../IDEFrame.py:367 ../IDEFrame.py:424 +#: ../IDEFrame.py:370 ../IDEFrame.py:425 msgid "Redo" msgstr "" @@ -2715,10 +3169,14 @@ msgid "Reference" msgstr "" -#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434 +#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:436 msgid "Refresh" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:1965 +msgid "Register Modify Dialog" +msgstr "" + #: ../dialogs/SearchInProjectDialog.py:70 msgid "Regular expression" msgstr "" @@ -2727,7 +3185,7 @@ msgid "Regular expressions" msgstr "" -#: ../editors/Viewer.py:1636 +#: ../editors/Viewer.py:1638 msgid "Release value" msgstr "" @@ -2735,16 +3193,16 @@ msgid "Remainder (modulo)" msgstr "" -#: ../BeremizIDE.py:1084 +#: ../BeremizIDE.py:1081 #, python-format msgid "Remove %s node" msgstr "" -#: ../IDEFrame.py:2445 +#: ../IDEFrame.py:2463 msgid "Remove Datatype" msgstr "" -#: ../IDEFrame.py:2450 +#: ../IDEFrame.py:2468 msgid "Remove Pou" msgstr "" @@ -2756,35 +3214,52 @@ msgid "Remove element" msgstr "" -#: ../editors/FileManagementPanel.py:66 +#: ../etherlab/ConfigEditor.py:1353 +msgid "Remove file from database" +msgstr "" + +#: ../editors/FileManagementPanel.py:65 msgid "Remove file from left folder" msgstr "" -#: ../editors/ResourceEditor.py:284 +#: ../etherlab/ConfigEditor.py:1389 +msgid "Remove file from library" +msgstr "" + +#: ../editors/ResourceEditor.py:282 msgid "Remove instance" msgstr "" +#: ../etherlab/ConfigEditor.py:653 +msgid "Remove process variable" +msgstr "" + #: ../canfestival/NetworkEditor.py:111 msgid "Remove slave" msgstr "" -#: ../editors/ResourceEditor.py:253 +#: ../etherlab/ConfigEditor.py:680 +msgid "Remove startup service variable" +msgstr "" + +#: ../editors/ResourceEditor.py:251 msgid "Remove task" msgstr "" -#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482 +#: ../bacnet/BacnetSlaveEditor.py:812 ../editors/CodeFileEditor.py:673 +#: ../controls/VariablePanel.py:484 msgid "Remove variable" msgstr "" -#: ../IDEFrame.py:1979 +#: ../IDEFrame.py:1996 msgid "Rename" msgstr "" -#: ../editors/FileManagementPanel.py:187 +#: ../editors/FileManagementPanel.py:186 msgid "Replace File" msgstr "" -#: ../editors/Viewer.py:598 +#: ../editors/Viewer.py:601 msgid "Replace Wire by connections" msgstr "" @@ -2796,11 +3271,11 @@ msgid "Reset" msgstr "" -#: ../editors/Viewer.py:681 +#: ../editors/Viewer.py:684 msgid "Reset Execution Order" msgstr "" -#: ../IDEFrame.py:453 +#: ../IDEFrame.py:459 msgid "Reset Perspective" msgstr "" @@ -2808,7 +3283,7 @@ msgid "Reset search result" msgstr "" -#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77 +#: ../BeremizIDE.py:1012 ../plcopen/types_enums.py:77 msgid "Resources" msgstr "" @@ -2816,11 +3291,11 @@ msgid "Retain" msgstr "" -#: ../controls/VariablePanel.py:455 +#: ../controls/VariablePanel.py:457 msgid "Return Type:" msgstr "" -#: ../editors/Viewer.py:582 +#: ../editors/Viewer.py:585 msgid "Right" msgstr "" @@ -2828,7 +3303,7 @@ msgid "Right PowerRail" msgstr "" -#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555 +#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:558 msgid "Rising Edge" msgstr "" @@ -2844,15 +3319,15 @@ msgid "Rounding up/down" msgstr "" -#: ../ProjectController.py:1828 +#: ../ProjectController.py:1911 msgid "Run" msgstr "" -#: ../ProjectController.py:1127 +#: ../ProjectController.py:1175 msgid "Runtime IO extensions C code generation failed !\n" msgstr "" -#: ../ProjectController.py:1136 +#: ../ProjectController.py:1186 msgid "Runtime library extensions C code generation failed !\n" msgstr "" @@ -2864,11 +3339,11 @@ msgid "SDO Server" msgstr "" -#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158 +#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161 msgid "SFC" msgstr "" -#: ../PLCGenerator.py:1433 +#: ../PLCGenerator.py:1482 #, python-brace-format msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\"" msgstr "" @@ -2879,7 +3354,7 @@ msgstr "" #: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36 -#: ../dialogs/PouDialog.py:44 +#: ../dialogs/PouDialog.py:128 msgid "ST" msgstr "" @@ -2891,7 +3366,7 @@ msgid "SVG files (*.svg)|*.svg|All files|*.*" msgstr "" -#: ../features.py:36 +#: ../features.py:25 msgid "SVGUI" msgstr "" @@ -2908,37 +3383,47 @@ msgid "Save as" msgstr "" -#: ../ProjectController.py:530 +#: ../etherlab/EtherCATManagementEditor.py:941 +#: ../etherlab/EtherCATManagementEditor.py:1289 +msgid "Save as..." +msgstr "" + +#: ../ProjectController.py:546 msgid "Save path is the same as path of a project! \n" msgstr "" +#: ../etherlab/EthercatMaster.py:455 ../etherlab/EthercatMaster.py:764 +#: ../etherlab/EthercatMaster.py:765 +msgid "Scan Network" +msgstr "" + #: ../dialogs/SearchInProjectDialog.py:73 msgid "Scope" msgstr "" -#: ../IDEFrame.py:644 +#: ../IDEFrame.py:650 msgid "Search" msgstr "" -#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430 +#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:387 ../IDEFrame.py:431 msgid "Search in Project" msgstr "" -#: ../dialogs/DurationEditorDialog.py:49 +#: ../dialogs/DurationEditorDialog.py:60 msgid "Seconds:" msgstr "" -#: ../IDEFrame.py:390 +#: ../IDEFrame.py:393 msgid "Select All" msgstr "" #: ../editors/Viewer.py:331 ../editors/TextViewer.py:305 -#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315 -#: ../controls/VariablePanel.py:378 +#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:314 +#: ../controls/VariablePanel.py:377 msgid "Select a variable class:" msgstr "" -#: ../ProjectController.py:1293 +#: ../ProjectController.py:1354 msgid "Select an editor:" msgstr "" @@ -2946,11 +3431,11 @@ msgid "Select an instance" msgstr "" -#: ../IDEFrame.py:628 +#: ../IDEFrame.py:634 msgid "Select an object" msgstr "" -#: ../ProjectController.py:537 +#: ../ProjectController.py:555 msgid "Selected directory already contains another project. Overwrite? \n" msgstr "" @@ -2966,6 +3451,14 @@ msgid "Selection Divergence" msgstr "" +#: ../runtime/NevowServer.py:182 +msgid "Send" +msgstr "" + +#: ../runtime/NevowServer.py:181 +msgid "Send a message to the log" +msgstr "" + #: ../dialogs/DiscoveryDialog.py:135 msgid "Service Discovery" msgstr "" @@ -2974,7 +3467,7 @@ msgid "Services available:" msgstr "" -#: ../dialogs/LDElementDialog.py:79 +#: ../dialogs/LDElementDialog.py:79 ../runtime/WampClient.py:434 msgid "Set" msgstr "" @@ -2986,7 +3479,7 @@ msgid "Shift right" msgstr "" -#: ../ProjectController.py:1863 +#: ../ProjectController.py:1946 msgid "Show IEC code generated by PLCGenerator" msgstr "" @@ -2998,7 +3491,7 @@ msgid "Show Master generated by config_utils" msgstr "" -#: ../ProjectController.py:1862 +#: ../ProjectController.py:1945 msgid "Show code" msgstr "" @@ -3018,6 +3511,14 @@ msgid "Single" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:361 +msgid "Slave SDO Monitoring" +msgstr "" + +#: ../etherlab/ConfigEditor.py:135 +msgid "Slave entries" +msgstr "" + #: ../targets/toolchain_makefile.py:130 msgid "Source didn't change, no build.\n" msgstr "" @@ -3035,44 +3536,56 @@ msgid "Standard function blocks" msgstr "" -#: ../ProjectController.py:1829 ../Beremiz_service.py:271 +#: ../etherlab/ConfigEditor.py:68 +msgid "Standardized Device Profile" +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:37 +msgid "Start Address" +msgstr "" + +#: ../ProjectController.py:1912 ../Beremiz_service.py:284 msgid "Start PLC" msgstr "" -#: ../ProjectController.py:1074 +#: ../ProjectController.py:1121 #, python-format msgid "Start build in %s\n" msgstr "" -#: ../ProjectController.py:1397 +#: ../runtime/PlcStatus.py:12 msgid "Started" msgstr "" -#: ../ProjectController.py:1633 +#: ../ProjectController.py:1714 msgid "Starting PLC\n" msgstr "" -#: ../BeremizIDE.py:393 +#: ../etherlab/ConfigEditor.py:674 +msgid "Startup service variables assignments:" +msgstr "" + +#: ../BeremizIDE.py:389 msgid "Status ToolBar" msgstr "" -#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424 +#: ../editors/Viewer.py:654 ../editors/Viewer.py:2426 msgid "Step" msgstr "" -#: ../ProjectController.py:1835 +#: ../ProjectController.py:1918 msgid "Stop" msgstr "" -#: ../Beremiz_service.py:272 +#: ../Beremiz_service.py:285 msgid "Stop PLC" msgstr "" -#: ../ProjectController.py:1836 +#: ../ProjectController.py:1919 msgid "Stop Running PLC" msgstr "" -#: ../ProjectController.py:1398 +#: ../runtime/PlcStatus.py:13 msgid "Stopped" msgstr "" @@ -3080,6 +3593,14 @@ msgid "Structure" msgstr "" +#: ../etherlab/ConfigEditor.py:48 +msgid "SubIndex" +msgstr "" + +#: ../etherlab/ConfigEditor.py:465 +msgid "Subindex" +msgstr "" + #: ../editors/DataTypeEditor.py:60 msgid "Subrange" msgstr "" @@ -3088,11 +3609,11 @@ msgid "Subtraction" msgstr "" -#: ../ProjectController.py:1113 +#: ../ProjectController.py:1160 msgid "Successfully built.\n" msgstr "" -#: ../IDEFrame.py:449 +#: ../IDEFrame.py:451 msgid "Switch perspective" msgstr "" @@ -3108,19 +3629,19 @@ msgid "Tangent" msgstr "" -#: ../editors/ResourceEditor.py:97 +#: ../editors/ResourceEditor.py:94 msgid "Task" msgstr "" -#: ../editors/ResourceEditor.py:248 +#: ../editors/ResourceEditor.py:246 msgid "Tasks:" msgstr "" -#: ../controls/VariablePanel.py:91 +#: ../controls/VariablePanel.py:88 msgid "Temp" msgstr "" -#: ../version.py:35 +#: ../version.py:37 msgid "" "The best place to ask questions about Beremiz/PLCOpenEditor\n" "is project's mailing list: beremiz-devel@lists.sourceforge.net\n" @@ -3132,27 +3653,38 @@ "https://lists.sourceforge.net/lists/listinfo/beremiz-devel" msgstr "" -#: ../editors/FileManagementPanel.py:186 +#: ../etherlab/EthercatMaster.py:454 +msgid "" +"The current network configuration will be deleted.\n" +"Do you want to continue?" +msgstr "" + +#: ../editors/FileManagementPanel.py:185 #, python-format msgid "" "The file '%s' already exist.\n" "Do you want to replace it?" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:928 +#: ../etherlab/EtherCATManagementEditor.py:1320 +msgid "The file does not exist!" +msgstr "" + #: ../editors/LDViewer.py:893 msgid "The group of block must be coherent!" msgstr "" -#: ../BeremizIDE.py:573 ../IDEFrame.py:1046 +#: ../BeremizIDE.py:569 ../IDEFrame.py:1059 msgid "There are changes, do you want to save?" msgstr "" -#: ../IDEFrame.py:1691 ../IDEFrame.py:1710 +#: ../IDEFrame.py:1708 ../IDEFrame.py:1727 #, python-format msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?" msgstr "" -#: ../IDEFrame.py:1133 +#: ../IDEFrame.py:1146 msgid "" "There was a problem printing.\n" "Perhaps your current printer is not set correctly?" @@ -3162,7 +3694,7 @@ msgid "This option isn't available yet!" msgstr "" -#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567 +#: ../controls/DebugVariablePanel/DebugVariablePanel.py:546 #, python-format msgid "Tick: %d" msgstr "" @@ -3200,53 +3732,57 @@ msgid "Time-of-day subtraction" msgstr "" +#: ../IDEFrame.py:432 +msgid "Toggle fullscreen mode" +msgstr "" + #: ../dialogs/ForceVariableDialog.py:188 msgid "Toggle value" msgstr "" -#: ../editors/Viewer.py:584 +#: ../editors/Viewer.py:587 msgid "Top" msgstr "" -#: ../ProjectController.py:1848 +#: ../ProjectController.py:1931 msgid "Transfer" msgstr "" -#: ../ProjectController.py:1849 +#: ../ProjectController.py:1932 msgid "Transfer PLC" msgstr "" -#: ../ProjectController.py:1802 +#: ../ProjectController.py:1884 msgid "Transfer completed successfully.\n" msgstr "" -#: ../ProjectController.py:1805 +#: ../ProjectController.py:1887 msgid "Transfer failed\n" msgstr "" -#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453 +#: ../editors/Viewer.py:655 ../editors/Viewer.py:2428 ../editors/Viewer.py:2455 msgid "Transition" msgstr "" -#: ../PLCGenerator.py:1564 +#: ../PLCGenerator.py:1613 #, python-format msgid "Transition \"%s\" body must contain an output variable or coil referring to its name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:91 +#: ../dialogs/PouTransitionDialog.py:90 msgid "Transition Name" msgstr "" -#: ../dialogs/PouTransitionDialog.py:60 +#: ../dialogs/PouTransitionDialog.py:59 msgid "Transition Name:" msgstr "" -#: ../PLCGenerator.py:1657 +#: ../PLCGenerator.py:1706 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU" msgstr "" -#: ../PLCGenerator.py:1646 +#: ../PLCGenerator.py:1695 #, python-brace-format msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU" msgstr "" @@ -3268,17 +3804,17 @@ msgid "Triggering" msgstr "" -#: ../Beremiz_service.py:490 +#: ../Beremiz_service.py:503 msgid "Twisted unavailable." msgstr "" -#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97 -#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733 -#: ../controls/VariablePanel.py:61 +#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:48 +#: ../editors/ResourceEditor.py:94 ../editors/DataTypeEditor.py:55 +#: ../editors/CodeFileEditor.py:752 ../controls/VariablePanel.py:61 msgid "Type" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:54 +#: ../dialogs/BrowseLocationsDialog.py:51 msgid "Type and derivated" msgstr "" @@ -3295,16 +3831,25 @@ msgid "Type infos:" msgstr "" -#: ../dialogs/BrowseLocationsDialog.py:55 +#: ../etherlab/EthercatCFileGenerator.py:76 +#, python-format +msgid "Type of location \"%s\" not yet supported!" +msgstr "" + +#: ../dialogs/BrowseLocationsDialog.py:52 msgid "Type strict" msgstr "" #: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59 -#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111 +#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:110 #: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61 msgid "Type:" msgstr "" +#: ../runtime/WampClient.py:129 +msgid "TypeError register option: {}" +msgstr "" + #: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42 msgid "URI host:" msgstr "" @@ -3327,7 +3872,17 @@ msgid "Unable to get Xenomai's %s \n" msgstr "" -#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252 +#: ../bacnet/bacnet.py:430 +#, python-format +msgid "Unable to load file \"%s\"!" +msgstr "" + +#: ../bacnet/bacnet.py:420 +#, python-format +msgid "Unable to save to file \"%s\"!" +msgstr "" + +#: ../PLCGenerator.py:1023 ../PLCGenerator.py:1301 #, python-brace-format msgid "Undefined block type \"{a1}\" in \"{a2}\" POU" msgstr "" @@ -3337,20 +3892,25 @@ msgid "Undefined pou type \"%s\"" msgstr "" -#: ../IDEFrame.py:365 ../IDEFrame.py:423 +#: ../IDEFrame.py:368 ../IDEFrame.py:424 msgid "Undo" msgstr "" -#: ../ProjectController.py:442 +#: ../ProjectController.py:457 msgid "Unknown" msgstr "" +#: ../etherlab/EthercatCFileGenerator.py:470 +#, python-brace-format +msgid "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}" +msgstr "" + #: ../editors/Viewer.py:437 #, python-format msgid "Unknown variable \"%s\" for this POU!" msgstr "" -#: ../ProjectController.py:439 ../ProjectController.py:440 +#: ../ProjectController.py:454 ../ProjectController.py:455 msgid "Unnamed" msgstr "" @@ -3359,12 +3919,20 @@ msgid "Unnamed%d" msgstr "" -#: ../controls/VariablePanel.py:308 +#: ../controls/VariablePanel.py:307 #, python-format msgid "Unrecognized data size \"%s\"" msgstr "" -#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841 +#: ../etherlab/EtherCATManagementEditor.py:2080 +msgid "Update" +msgstr "" + +#: ../runtime/WampClient.py:380 +msgid "Upload:" +msgstr "" + +#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:852 msgid "User Data Types" msgstr "" @@ -3376,7 +3944,7 @@ msgid "User-defined POUs" msgstr "" -#: ../dialogs/ActionBlockDialog.py:42 +#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:465 msgid "Value" msgstr "" @@ -3384,24 +3952,29 @@ msgid "Values:" msgstr "" -#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622 -#: ../editors/Viewer.py:2456 +#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:625 +#: ../editors/Viewer.py:2458 msgid "Variable" msgstr "" #: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404 #: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344 -#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355 +#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:354 msgid "Variable Drop" msgstr "" -#: ../dialogs/FBDVariableDialog.py:68 +#: ../etherlab/ConfigEditor.py:70 +#, python-format +msgid "Variable Index: #x%4.4X" +msgstr "" + +#: ../dialogs/FBDVariableDialog.py:58 msgid "Variable Properties" msgstr "" #: ../editors/Viewer.py:332 ../editors/TextViewer.py:306 -#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316 -#: ../controls/VariablePanel.py:379 +#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:315 +#: ../controls/VariablePanel.py:378 msgid "Variable class" msgstr "" @@ -3409,24 +3982,28 @@ msgid "Variable don't belong to this POU!" msgstr "" +#: ../etherlab/ConfigEditor.py:280 +msgid "Variable entries:" +msgstr "" + #: ../dialogs/LDElementDialog.py:92 msgid "Variable:" msgstr "" -#: ../controls/VariablePanel.py:90 +#: ../controls/VariablePanel.py:87 msgid "Variables" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:166 +#: ../controls/ProjectPropertiesPanel.py:169 msgid "Vertical:" msgstr "" -#: ../runtime/WampClient.py:113 +#: ../runtime/WampClient.py:170 #, python-format msgid "WAMP Client connection failed (%s) .. retrying .." msgstr "" -#: ../runtime/WampClient.py:117 +#: ../runtime/WampClient.py:179 #, python-format msgid "WAMP Client connection lost (%s) .. retrying .." msgstr "" @@ -3435,49 +4012,66 @@ msgid "WAMP ID:" msgstr "" -#: ../runtime/WampClient.py:172 +#: ../runtime/WampClient.py:413 +msgid "WAMP Server URL" +msgstr "" + +#: ../runtime/WampClient.py:276 +msgid "WAMP authentication has no secret configured" +msgstr "" + +#: ../runtime/WampClient.py:304 +msgid "WAMP client can not connect to :" +msgstr "" + +#: ../runtime/WampClient.py:301 msgid "WAMP client connecting to :" msgstr "" -#: ../runtime/WampClient.py:148 -msgid "WAMP client connection not established!" -msgstr "" - -#: ../Beremiz_service.py:625 +#: ../Beremiz_service.py:628 msgid "WAMP client startup failed. " msgstr "" -#: ../Beremiz_service.py:621 -msgid "WAMP config is incomplete." -msgstr "" - -#: ../Beremiz_service.py:623 -msgid "WAMP config is missing." -msgstr "" - -#: ../connectors/WAMP/__init__.py:99 +#: ../runtime/WampClient.py:206 +msgid "WAMP configuration error : missing '{}' parameter." +msgstr "" + +#: ../runtime/WampClient.py:192 +msgid "WAMP configuration error:" +msgstr "" + +#: ../connectors/WAMP/__init__.py:100 #, python-format msgid "WAMP connecting to URL : %s\n" msgstr "" -#: ../connectors/WAMP/__init__.py:140 +#: ../connectors/WAMP/__init__.py:141 msgid "WAMP connection timeout" msgstr "" -#: ../connectors/WAMP/__init__.py:158 +#: ../connectors/WAMP/__init__.py:159 #, python-format msgid "WAMP connection to '%s' failed.\n" msgstr "" -#: ../Beremiz_service.py:595 +#: ../runtime/WampClient.py:280 +msgid "WAMP deactivated in configuration" +msgstr "" + +#: ../Beremiz_service.py:605 msgid "WAMP import failed :" msgstr "" -#: ../runtime/WampClient.py:126 -msgid "WAMP load error: " -msgstr "" - -#: ../runtime/WampClient.py:108 +#: ../runtime/WampClient.py:241 +msgid "WAMP secret empty" +msgstr "" + +#: ../runtime/WampClient.py:139 +#, python-format +msgid "WAMP session joined (%s) by:" +msgstr "" + +#: ../runtime/WampClient.py:146 msgid "WAMP session left" msgstr "" @@ -3485,15 +4079,24 @@ msgid "WXGLADE GUI" msgstr "" -#: ../runtime/WampClient.py:137 -msgid "Wamp secret load error:" -msgstr "" - -#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902 +#: ../runtime/WampClient.py:432 +msgid "Wamp Settings" +msgstr "" + +#: ../dialogs/PouDialog.py:172 ../editors/LDViewer.py:902 msgid "Warning" msgstr "" -#: ../ProjectController.py:726 +#: ../etherlab/EthercatCFileGenerator.py:405 +#: ../etherlab/EthercatCFileGenerator.py:571 +msgid "Warning: " +msgstr "" + +#: ../wxglade_hmi/wxglade_hmi.py:166 +msgid "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n" +msgstr "" + +#: ../ProjectController.py:756 msgid "Warnings in ST/IL/SFC code generator :\n" msgstr "" @@ -3501,7 +4104,7 @@ msgid "Whole Project" msgstr "" -#: ../controls/ProjectPropertiesPanel.py:134 +#: ../controls/ProjectPropertiesPanel.py:137 msgid "Width:" msgstr "" @@ -3509,27 +4112,63 @@ msgid "Wrap search" msgstr "" +#: ../etherlab/ConfigEditor.py:345 +msgid "Write to (nodeid, index, subindex)" +msgstr "" + #: ../dialogs/AboutDialog.py:126 msgid "Written by" msgstr "" -#: ../features.py:35 +#: ../etherlab/EthercatCFileGenerator.py:409 +#: ../etherlab/EthercatCFileGenerator.py:499 +#, python-format +msgid "Wrong direction for location \"%s\"!" +msgstr "" + +#: ../etherlab/EthercatCFileGenerator.py:400 +#: ../etherlab/EthercatCFileGenerator.py:487 +#, python-format +msgid "Wrong type for location \"%s\"!" +msgstr "" + +#: ../features.py:24 msgid "WxGlade GUI" msgstr "" +#: ../etherlab/ConfigEditor.py:1236 +msgid "XML files (*.xml)|*.xml|All files|*.*" +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:652 +msgid "You can input only hex, dec value" +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:1999 +msgid "You can't modify it. This register is read-only or it's not connected." +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:648 +msgid "You cannot SDO download this state" +msgstr "" + #: ../svgui/svgui.py:150 msgid "" "You don't have write permissions.\n" "Open Inkscape anyway ?" msgstr "" -#: ../wxglade_hmi/wxglade_hmi.py:160 +#: ../wxglade_hmi/wxglade_hmi.py:175 msgid "" "You don't have write permissions.\n" "Open wxGlade anyway ?" msgstr "" -#: ../ProjectController.py:390 +#: ../etherlab/EtherCATManagementEditor.py:2002 +msgid "You entered wrong value. You can enter dec or hex value only." +msgstr "" + +#: ../ProjectController.py:403 msgid "" "You must have permission to work on the project\n" "Work on a project copy ?" @@ -3551,11 +4190,21 @@ msgid "You must type a value!" msgstr "" -#: ../IDEFrame.py:440 +#: ../IDEFrame.py:442 msgid "Zoom" msgstr "" -#: ../dialogs/DurationEditorDialog.py:158 +#: ../etherlab/EtherCATManagementEditor.py:911 +#: ../etherlab/EtherCATManagementEditor.py:1307 +msgid "bin files (*.bin)|*.bin" +msgstr "" + +#: ../etherlab/EtherCATManagementEditor.py:942 +#: ../etherlab/EtherCATManagementEditor.py:1290 +msgid "bin files (*.bin)|*.bin|All files|*.*" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:159 msgid "days" msgstr "" @@ -3569,35 +4218,39 @@ msgid "exited with status {a1} (pid {a2})\n" msgstr "" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "function" msgstr "" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "functionBlock" msgstr "" -#: ../dialogs/DurationEditorDialog.py:158 +#: ../dialogs/DurationEditorDialog.py:159 msgid "hours" msgstr "" -#: ../ProjectController.py:753 +#: ../ProjectController.py:784 msgid "matiec installation is not found\n" msgstr "" +#: ../dialogs/DurationEditorDialog.py:162 +msgid "microseconds" +msgstr "" + +#: ../dialogs/DurationEditorDialog.py:161 +msgid "milliseconds" +msgstr "" + #: ../dialogs/DurationEditorDialog.py:160 -msgid "milliseconds" -msgstr "" - -#: ../dialogs/DurationEditorDialog.py:159 msgid "minutes" msgstr "" -#: ../dialogs/PouDialog.py:36 +#: ../dialogs/PouDialog.py:110 msgid "program" msgstr "" -#: ../dialogs/DurationEditorDialog.py:159 +#: ../dialogs/DurationEditorDialog.py:160 msgid "seconds" msgstr "" @@ -3613,6 +4266,10 @@ msgid "string right of" msgstr "" +#: ../etherlab/EtherCATManagementEditor.py:323 +msgid "update" +msgstr "" + #: ../Beremiz.py:167 msgid "update info unavailable." msgstr "" @@ -3667,6 +4324,33 @@ msgid "CAN_Driver" msgstr "" +msgid "BACnetServerNode" +msgstr "" + +msgid "Network_Interface" +msgstr "" + +msgid "UDP_Port_Number" +msgstr "" + +msgid "BACnet_Communication_Control_Password" +msgstr "" + +msgid "BACnet_Device_ID" +msgstr "" + +msgid "BACnet_Device_Name" +msgstr "" + +msgid "BACnet_Device_Location" +msgstr "" + +msgid "BACnet_Device_Description" +msgstr "" + +msgid "BACnet_Device_Application_Software_Version" +msgstr "" + msgid "Generic" msgstr "" @@ -3763,6 +4447,24 @@ msgid "MaxRemoteTCPclients" msgstr "" +msgid "CIA402SlaveParams" +msgstr "" + +msgid "Enable%s" +msgstr "" + +msgid "ProcessVariables" +msgstr "" + +msgid "variable" +msgstr "" + +msgid "ReadFrom" +msgstr "" + +msgid "WriteTo" +msgstr "" + msgid "BaseParams" msgstr "" @@ -3793,9 +4495,6 @@ msgid "variables" msgstr "" -msgid "variable" -msgstr "" - msgid "name" msgstr "" diff -r e0f16317668e -r 15f18dc8b56a i18n/mki18n.py --- a/i18n/mki18n.py Thu Nov 22 23:39:54 2018 +0100 +++ b/i18n/mki18n.py Fri Nov 23 00:33:04 2018 +0100 @@ -97,9 +97,29 @@ # ----------------------------------------------------------------------------- +def getSupportedLanguageDict(appname): + """ + Returns dictionary with languages already supported + by given application + + param: appname: + name of application + """ + languageDict = {} + ext = '.po' + files = [x for x in os.listdir('.') + if x.startswith(appname) and x.endswith(ext)] + + langs = [x.split(appname + '_')[1].split(ext)[0] for x in files] + for lang in langs: + languageDict[lang] = lang + + return languageDict + + def getlanguageDict(): languageDict = {} - + getSupportedLanguageDict('Beremiz') if wx.VERSION >= (3, 0, 0): _app = wx.App() else: @@ -205,7 +225,7 @@ verbosePrint(verbose, cmd) os.system(cmd) - languageDict = getlanguageDict() + languageDict = getSupportedLanguageDict(applicationName) for langCode in languageDict.keys(): if langCode == 'en': @@ -230,7 +250,7 @@ currentDir = os.getcwd() os.chdir(applicationDirectoryPath) - languageDict = getlanguageDict() + languageDict = getSupportedLanguageDict(applicationName) for langCode in languageDict.keys(): if langCode == 'en': @@ -284,7 +304,7 @@ currentDir = os.getcwd() os.chdir(applicationDirectoryPath) - languageDict = getlanguageDict() + languageDict = getSupportedLanguageDict(applicationName) for langCode in languageDict.keys(): if (langCode == 'en') and (forceEnglish == 0): @@ -466,7 +486,7 @@ exit_code = 1 try: optionList, pargs = getopt.getopt(sys.argv[1:], validOptions, validLongOptions) - except getopt.GetoptError, e: + except getopt.GetoptError as e: printUsage(e[0]) sys.exit(1) for (opt, val) in optionList: @@ -492,7 +512,7 @@ try: makePO(appDirPath, option['domain'], option['verbose']) exit_code = 0 - except IOError, e: + except IOError as e: printUsage(e[1] + '\n You must write a file app.fil that contains the list of all files to parse.') if option['mo']: makeMO(appDirPath, option['moTarget'], option['domain'], option['verbose'], option['forceEnglish']) diff -r e0f16317668e -r 15f18dc8b56a locale/bn_BD/LC_MESSAGES/Beremiz.mo Binary file locale/bn_BD/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/de_DE/LC_MESSAGES/Beremiz.mo Binary file locale/de_DE/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/es_ES/LC_MESSAGES/Beremiz.mo Binary file locale/es_ES/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/fr_FR/LC_MESSAGES/Beremiz.mo Binary file locale/fr_FR/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/hr/LC_MESSAGES/Beremiz.mo Binary file locale/hr/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/hu_HU/LC_MESSAGES/Beremiz.mo Binary file locale/hu_HU/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/it_IT/LC_MESSAGES/Beremiz.mo Binary file locale/it_IT/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/ko_KR/LC_MESSAGES/Beremiz.mo Binary file locale/ko_KR/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/nl_NL/LC_MESSAGES/Beremiz.mo Binary file locale/nl_NL/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/pl/LC_MESSAGES/Beremiz.mo Binary file locale/pl/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/pt/LC_MESSAGES/Beremiz.mo Binary file locale/pt/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/pt_BR/LC_MESSAGES/Beremiz.mo Binary file locale/pt_BR/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/pt_PT/LC_MESSAGES/Beremiz.mo Binary file locale/pt_PT/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/ro_RO/LC_MESSAGES/Beremiz.mo Binary file locale/ro_RO/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/ru_RU/LC_MESSAGES/Beremiz.mo Binary file locale/ru_RU/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/sl_SI/LC_MESSAGES/Beremiz.mo Binary file locale/sl_SI/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/tr_TR/LC_MESSAGES/Beremiz.mo Binary file locale/tr_TR/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a locale/zh_CN/LC_MESSAGES/Beremiz.mo Binary file locale/zh_CN/LC_MESSAGES/Beremiz.mo has changed diff -r e0f16317668e -r 15f18dc8b56a plcopen/plcopen.py --- a/plcopen/plcopen.py Thu Nov 22 23:39:54 2018 +0100 +++ b/plcopen/plcopen.py Fri Nov 23 00:33:04 2018 +0100 @@ -298,7 +298,7 @@ return tree, error - except Exception, e: + except Exception as e: return None, e.message diff -r e0f16317668e -r 15f18dc8b56a py_ext/PythonFileCTNMixin.py --- a/py_ext/PythonFileCTNMixin.py Thu Nov 22 23:39:54 2018 +0100 +++ b/py_ext/PythonFileCTNMixin.py Fri Nov 23 00:33:04 2018 +0100 @@ -73,7 +73,7 @@ os.remove(filepath) self.CreateCodeFileBuffer(False) self.OnCTNSave() - except Exception, exc: + except Exception as exc: error = unicode(exc) if error is not None: diff -r e0f16317668e -r 15f18dc8b56a runtime/PLCObject.py --- a/runtime/PLCObject.py Thu Nov 22 23:39:54 2018 +0100 +++ b/runtime/PLCObject.py Fri Nov 23 00:33:04 2018 +0100 @@ -34,6 +34,7 @@ from runtime.typemapping import TypeTranslator from runtime.loglevels import LogLevelsDefault, LogLevelsCount from runtime.Stunnel import getPSKID +from runtime import PlcStatus from runtime import MainWorker if os.name in ("nt", "ce"): @@ -75,7 +76,7 @@ self.statuschange = statuschange self.evaluator = evaluator self.pyruntimevars = pyruntimevars - self.PLCStatus = "Empty" + self.PLCStatus = PlcStatus.Empty self.PLClibraryHandle = None self.PLClibraryLock = Lock() # Creates fake C funcs proxies @@ -396,17 +397,17 @@ else: res = str(result) self.python_runtime_vars["FBID"] = None - except Exception, e: + except Exception as e: res = "#EXCEPTION : "+str(e) self.LogMessage(1, ('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID, cmd, str(e))) @RunInMain def StartPLC(self): - if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped": + if self.CurrentPLCFilename is not None and self.PLCStatus == PlcStatus.Stopped: c_argv = ctypes.c_char_p * len(self.argv) res = self._startPLC(len(self.argv), c_argv(*self.argv)) if res == 0: - self.PLCStatus = "Started" + self.PLCStatus = PlcStatus.Started self.StatusChange() self.PythonRuntimeCall("start") self.StartSem = Semaphore(0) @@ -416,16 +417,16 @@ self.LogMessage("PLC started") else: self.LogMessage(0, _("Problem starting PLC : error %d" % res)) - self.PLCStatus = "Broken" + self.PLCStatus = PlcStatus.Broken self.StatusChange() @RunInMain def StopPLC(self): - if self.PLCStatus == "Started": + if self.PLCStatus == PlcStatus.Started: self.LogMessage("PLC stopped") self._stopPLC() self.PythonThread.join() - self.PLCStatus = "Stopped" + self.PLCStatus = PlcStatus.Stopped self.StatusChange() self.PythonRuntimeCall("stop") if self.TraceThread is not None: @@ -444,7 +445,7 @@ @RunInMain def NewPLC(self, md5sum, data, extrafiles): - if self.PLCStatus in ["Stopped", "Empty", "Broken"]: + if self.PLCStatus in [PlcStatus.Stopped, PlcStatus.Empty, PlcStatus.Broken]: NewFileName = md5sum + lib_ext extra_files_log = os.path.join(self.workingdir, "extra_files.txt") @@ -460,7 +461,7 @@ self.UnLoadPLC() self.LogMessage("NewPLC (%s)" % md5sum) - self.PLCStatus = "Empty" + self.PLCStatus = PlcStatus.Empty try: if replace_PLC_shared_object: @@ -491,20 +492,20 @@ # Store new PLC filename self.CurrentPLCFilename = NewFileName except Exception: - self.PLCStatus = "Broken" + self.PLCStatus = PlcStatus.Broken self.StatusChange() PLCprint(traceback.format_exc()) return False if not replace_PLC_shared_object: - self.PLCStatus = "Stopped" + self.PLCStatus = PlcStatus.Stopped elif self.LoadPLC(): - self.PLCStatus = "Stopped" + self.PLCStatus = PlcStatus.Stopped else: - self.PLCStatus = "Broken" + self.PLCStatus = PlcStatus.Broken self.StatusChange() - return self.PLCStatus == "Stopped" + return self.PLCStatus == PlcStatus.Stopped return False def MatchMD5(self, MD5): @@ -539,7 +540,7 @@ def _TracesSwap(self): self.LastSwapTrace = time() - if self.TraceThread is None and self.PLCStatus == "Started": + if self.TraceThread is None and self.PLCStatus == PlcStatus.Started: self.TraceThread = Thread(target=self.TraceThreadProc) self.TraceThread.start() self.TraceLock.acquire() @@ -557,7 +558,7 @@ Return a list of traces, corresponding to the list of required idx """ self._resumeDebug() # Re-enable debugger - while self.PLCStatus == "Started": + while self.PLCStatus == PlcStatus.Started: tick = ctypes.c_uint32() size = ctypes.c_uint32() buff = ctypes.c_void_p() @@ -600,7 +601,7 @@ def RemoteExec(self, script, *kwargs): try: - exec script in kwargs + exec(script, kwargs) except Exception: _e_type, e_value, e_traceback = sys.exc_info() line_no = traceback.tb_lineno(get_last_traceback(e_traceback)) diff -r e0f16317668e -r 15f18dc8b56a runtime/PlcStatus.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/PlcStatus.py Fri Nov 23 00:33:04 2018 +0100 @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +# See COPYING.Runtime file for copyrights details. + + +def _(x): + """No translation""" + return x + + +Broken = _("Broken") +Started = _("Started") +Stopped = _("Stopped") +Disconnected = _("Disconnected") +Empty = _("Empty") diff -r e0f16317668e -r 15f18dc8b56a runtime/WampClient.py --- a/runtime/WampClient.py Thu Nov 22 23:39:54 2018 +0100 +++ b/runtime/WampClient.py Fri Nov 23 00:33:04 2018 +0100 @@ -160,7 +160,7 @@ if protocolOptions: self.setProtocolOptions(**protocolOptions) _transportFactory = self - except Exception, e: + except Exception as e: print(_("Custom protocol options failed :"), e) _transportFactory = None diff -r e0f16317668e -r 15f18dc8b56a runtime/Worker.py --- a/runtime/Worker.py Thu Nov 22 23:39:54 2018 +0100 +++ b/runtime/Worker.py Fri Nov 23 00:33:04 2018 +0100 @@ -103,7 +103,10 @@ if _job.success: return _job.result else: - raise _job.exc_info[0], _job.exc_info[1], _job.exc_info[2] + exc_type = _job.exc_info[0] + exc_value = _job.exc_info[1] + exc_traceback = _job.exc_info[2] + six.reraise(exc_type, exc_value, exc_traceback) def quit(self): """ diff -r e0f16317668e -r 15f18dc8b56a svgui/pyjs/build.py --- a/svgui/pyjs/build.py Thu Nov 22 23:39:54 2018 +0100 +++ b/svgui/pyjs/build.py Fri Nov 23 00:33:04 2018 +0100 @@ -99,7 +99,7 @@ copytree_exists(srcname, dstname, symlinks) else: shutil.copy2(srcname, dstname) - except (IOError, os.error), why: + except (IOError, os.error) as why: errors.append((srcname, dstname, why)) if errors: print(errors) @@ -184,7 +184,7 @@ try: print("Creating output directory") os.mkdir(output) - except StandardError, e: + except StandardError as e: print("Exception creating output directory %s: %s" % (output, e), file=sys.stderr) # public dir diff -r e0f16317668e -r 15f18dc8b56a svgui/pyjs/lib/pyjslib.py --- a/svgui/pyjs/lib/pyjslib.py Thu Nov 22 23:39:54 2018 +0100 +++ b/svgui/pyjs/lib/pyjslib.py Fri Nov 23 00:33:04 2018 +0100 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# pylint: disable=too-many-function-args,undefined-variable,no-absolute-import +# pylint: disable=too-many-function-args,undefined-variable,no-absolute-import,assign-to-new-keyword # iteration from Bob Ippolito's Iteration in JavaScript diff -r e0f16317668e -r 15f18dc8b56a svgui/pyjs/pyjs.py --- a/svgui/pyjs/pyjs.py Thu Nov 22 23:39:54 2018 +0100 +++ b/svgui/pyjs/pyjs.py Fri Nov 23 00:33:04 2018 +0100 @@ -1331,8 +1331,8 @@ %(lhs)s %(op)s %(iterator_name)s.next(); %(assign_tuple)s """ % loc_dict) - for node in node.body.nodes: - self._stmt(node, current_klass) + for n in node.body.nodes: + self._stmt(n, current_klass) self.printo(""" } } catch (e) { diff -r e0f16317668e -r 15f18dc8b56a tests/BACnet/plc.xml --- a/tests/BACnet/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/BACnet/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -73,14 +73,14 @@ - + - + EnergyCounter - + @@ -137,30 +137,30 @@ - - + + - + - - + + - + - - + + - + @@ -172,31 +172,31 @@ - + - - + + - - + + Temperature - + 18.0 - + @@ -209,33 +209,33 @@ 120 - + - + - - + + - + - - + + - + - - + + @@ -244,38 +244,38 @@ - + - - + + - - + + Humidity - + 55.0 - + 78.0 - + @@ -314,10 +314,10 @@ - + - + Temperature @@ -356,10 +356,10 @@ - + - + ControlDisable @@ -374,10 +374,10 @@ Cooler - + - + TemperatureSetPoint @@ -414,10 +414,10 @@ - + - + Temperature @@ -456,10 +456,10 @@ - + - + ControlDisable @@ -474,10 +474,10 @@ Heater - + - + TemperatureSetPoint diff -r e0f16317668e -r 15f18dc8b56a tests/canopen_master/plc.xml --- a/tests/canopen_master/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/canopen_master/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,15 +1,7 @@ - - - - + + + + @@ -42,14 +34,12 @@ - - + + - - - + diff -r e0f16317668e -r 15f18dc8b56a tests/canopen_slave/plc.xml --- a/tests/canopen_slave/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/canopen_slave/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,15 +1,7 @@ - - - - + + + + @@ -42,14 +34,12 @@ - - + + - - - + @@ -113,8 +103,8 @@ - - + + diff -r e0f16317668e -r 15f18dc8b56a tests/first_steps/plc.xml --- a/tests/first_steps/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/first_steps/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -163,21 +163,21 @@ - + Reset - + - - + + @@ -191,7 +191,7 @@ - + - + Reset - + Reset - + Reset - + - - + + @@ -300,13 +300,13 @@ - + Reset - + @@ -323,9 +323,7 @@ - - - + @@ -352,9 +350,7 @@ - - - + @@ -363,18 +359,18 @@ - + - + - + AVCnt @@ -394,12 +390,12 @@ Cnt1 - + - - + + @@ -436,12 +432,12 @@ Cnt4 - + - - + + @@ -546,23 +542,23 @@ OUT - + - - - - - - - + + + + + + + Cnt - + @@ -570,9 +566,7 @@ - - - + @@ -583,9 +577,9 @@ - - - + + + @@ -594,26 +588,26 @@ - + - + - + ResetCounterValue - + 1 - + @@ -632,7 +626,7 @@ - + @@ -643,7 +637,7 @@ - + @@ -652,7 +646,7 @@ - + @@ -756,29 +750,29 @@ - - - - + + + + - + - + - - + + - - + + @@ -814,13 +808,13 @@ - - + + - - + + @@ -896,7 +890,7 @@ - + @@ -1000,29 +994,27 @@ - + - - + + Out - - + + - - - + - + Cnt @@ -1034,9 +1026,7 @@ - - - + @@ -1047,9 +1037,9 @@ - - - + + + @@ -1071,7 +1061,7 @@ ResetCounterValue - + diff -r e0f16317668e -r 15f18dc8b56a tests/logging/plc.xml --- a/tests/logging/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/logging/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -52,10 +52,10 @@ - - - - + + + + 'IEC side logging: beat #' @@ -81,13 +81,13 @@ - - + + - - + + @@ -95,7 +95,7 @@ - + beat @@ -111,7 +111,7 @@ - + @@ -120,11 +120,7 @@ - - - - - + @@ -139,12 +135,12 @@ - + - - + + @@ -164,6 +160,8 @@ + + @@ -210,13 +208,13 @@ - + - + @@ -259,9 +257,7 @@ - - - + @@ -270,7 +266,7 @@ - + @@ -284,9 +280,7 @@ - - - + @@ -295,9 +289,7 @@ - - - + @@ -316,15 +308,15 @@ - - - - + + + + T#3s - - + + - + @@ -245,13 +245,13 @@ 'time.sleep(1)' - + - + @@ -262,7 +262,7 @@ - + @@ -323,13 +323,13 @@ pytest_var2 - + - + @@ -340,8 +340,8 @@ - - + + @@ -360,10 +360,10 @@ - + - + 'sys.stdout.write("FBID :"+str(FBID)+"\n")' @@ -375,13 +375,13 @@ 'PLCBinary.Simple_C_Call(5678)' - + - + @@ -392,7 +392,7 @@ - + @@ -420,13 +420,13 @@ 'MyPythonFunc(42)' - + - + @@ -437,7 +437,7 @@ - + @@ -464,16 +464,16 @@ - + - - - - + + + + @@ -481,10 +481,10 @@ - - - - + + + + @@ -492,10 +492,10 @@ - - - - + + + + @@ -503,10 +503,10 @@ - - - - + + + + @@ -514,8 +514,8 @@ - - + + @@ -530,27 +530,27 @@ - + - - + + pytest_var1 - + - - - - + + + + @@ -558,8 +558,8 @@ - - + + @@ -567,10 +567,10 @@ - - - - + + + + @@ -578,10 +578,10 @@ - - - - + + + + @@ -589,10 +589,10 @@ - - - - + + + + @@ -606,20 +606,20 @@ - - - - + + + + mux1_sel - + - - + + pytest_var3 @@ -771,10 +771,10 @@ - + - + Test_DT @@ -824,7 +824,7 @@ - + @@ -835,7 +835,7 @@ Test_Date - + @@ -846,7 +846,7 @@ Test_String - + @@ -879,10 +879,10 @@ - + - + 'True' @@ -908,10 +908,10 @@ - + - + Global_RS.Q1 @@ -964,7 +964,7 @@ Global_RS.S - + @@ -975,10 +975,10 @@ Global_RS.R1 - + - + Global_RS.Q1 @@ -1098,14 +1098,14 @@ TUTU - + - + Second_Python_Var - + @@ -1123,7 +1123,7 @@ 23 - + @@ -1131,7 +1131,7 @@ - + @@ -1140,25 +1140,25 @@ - - - - - - + + + + + + - + fefvsd - + - + fefvsd @@ -1169,10 +1169,10 @@ - - - - + + + + mux2_sel diff -r e0f16317668e -r 15f18dc8b56a tests/svgui/plc.xml --- a/tests/svgui/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/svgui/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -46,14 +46,14 @@ - + - - + + @@ -61,8 +61,8 @@ - - + + @@ -70,12 +70,12 @@ - - - - - - + + + + + + @@ -95,12 +95,12 @@ - + - - + + @@ -109,56 +109,56 @@ counter - + BOOL#1 - + 'stop_back' - + 'stop_sele' - - - - + + + + 'text_counter' - + 'led_stop' - + 'led_start' - + - - + + @@ -173,14 +173,14 @@ - + - - + + @@ -188,8 +188,8 @@ - - + + @@ -197,8 +197,8 @@ - - + + @@ -223,21 +223,21 @@ - + BOOL#1 - + - - + + @@ -245,8 +245,8 @@ - - + + @@ -254,8 +254,8 @@ - - + + @@ -264,21 +264,21 @@ - + BOOL#1 - + - - + + @@ -286,8 +286,8 @@ - - + + @@ -295,8 +295,8 @@ - - + + @@ -305,18 +305,18 @@ - + - - - - - - + + + + + + @@ -324,8 +324,8 @@ - - + + @@ -340,53 +340,53 @@ - + - - + + - + - - + + - + - + counter - + - + - - + + @@ -394,8 +394,8 @@ - - + + @@ -410,20 +410,20 @@ - + - + - - + + @@ -438,13 +438,13 @@ - + - - + + - + &1 | grep 'warning' + if [ $? -eq 0 ]; then + echo "Syntax error in $i" + set_exit_error + fi + done + echo "DONE" + echo "" +} + # pep8 was renamed to pycodestyle # detect existed version pep8_detect() @@ -116,6 +157,7 @@ user_select=$user_select,E228 # E228 missing whitespace around modulo operator user_select=$user_select,W293 # W293 blank line contains whitespace user_select=$user_select,E302 # E302 expected 2 blank lines, found 1 + user_select=$user_select,E301 # E301 expected 2 blank lines, found 1 user_select=$user_select,E261 # E261 at least two spaces before inline comment user_select=$user_select,E271 # E271 multiple spaces after keyword user_select=$user_select,E231 # E231 missing whitespace after ',' @@ -225,6 +267,10 @@ disable=$disable,R0201 # (no-self-use) Method could be a function disable=$disable,W0221 # (arguments-differ) Arguments number differs from overridden 'X' method disable=$disable,C0201 # (consider-iterating-dictionary) Consider iterating the dictionary directly instead of calling .keys() + disable=$disable,W0201 # (attribute-defined-outside-init) Attribute 'X' defined outside __init__ + disable=$disable,I1101 # (c-extension-no-member) Module 'lxml.etree' has not 'X' member, + # but source is unavailable. Consider adding this module to extension-pkg-whitelist + # if you want to perform analysis based on run-time introspection of living objects. # It'd be nice to fix warnings below some day disable=$disable,C0111 # missing-docstring @@ -244,8 +290,11 @@ disable=$disable,R0916 # (too-many-boolean-expressions) Too many boolean expressions in if statement (6/5) disable=$disable,R0101 # (too-many-nested-blocks) Too many nested blocks (7/5) disable=$disable,R0801 # (duplicate-code) Similar lines in N files - - + disable=$disable,W0401 # (wildcard-import) Wildcard import + disable=$disable,W0614 # (unused-wildcard-import), ] Unused import X from wildcard import + disable=$disable,W0212 # (protected-access) Access to a protected member X of a Y class + disable=$disable,E1101 # (no-member) Instance of 'X' has no 'Y' member + enable= enable=$enable,E1601 # print statement used enable=$enable,C0325 # (superfluous-parens) Unnecessary parens after keyword @@ -260,11 +309,9 @@ enable=$enable,W0101 # (unreachable) Unreachable code enable=$enable,E0102 # (function-redefined) method already defined enable=$enable,W0602 # (global-variable-not-assigned) Using global for 'X' but no assignment is done - enable=$enable,W0612 # (unused-variable) Unused variable 'X' enable=$enable,W0611 # (unused-import) Unused import X enable=$enable,C1001 # (old-style-class) Old-style class defined. Problem with PyJS enable=$enable,W0102 # (dangerous-default-value) Dangerous default value {} as argument - enable=$enable,W0403 # (relative-import) Relative import 'Y', should be 'X.Y' enable=$enable,C0112 # (empty-docstring) enable=$enable,W0631 # (undefined-loop-variable) Using possibly undefined loop variable 'X' enable=$enable,W0104 # (pointless-statement) Statement seems to have no effect @@ -281,15 +328,25 @@ enable=$enable,E0213 # (no-self-argument) Method should have "self" as first argument enable=$enable,E0401 # (import-error) Unable to import 'X' enable=$enable,E1121 # (too-many-function-args) Too many positional arguments for function call - enable=$enable,E0602 # (undefined-variable) Undefined variable 'X' enable=$enable,W0232 # (no-init) Class has no __init__ method enable=$enable,W0233 # (non-parent-init-called) __init__ method from a non direct base class 'X' is called enable=$enable,W0601 # (global-variable-undefined) Global variable 'X' undefined at the module level + enable=$enable,W0111 # (assign-to-new-keyword) Name async will become a keyword in Python 3.7 enable=$enable,W0623 # (redefine-in-handler) Redefining name 'X' from outer scope (line Y) in exception handler + enable=$enable,W0109 # (duplicate-key) Duplicate key 'X' in dictionary + enable=$enable,E1310 # (bad-str-strip-call) Suspicious argument in str.strip call + enable=$enable,E1300 # (bad-format-character) Unsupported format character '"' (0x22) at index 17 + enable=$enable,E1304 # (missing-format-string-key) Missing key 'X_name' in format string dictionary + enable=$enable,R1701 # (consider-merging-isinstance) Consider merging these isinstance calls to isinstance(CTNLDFLAGS, (str, unicode)) + enable=$enable,R1704 # (redefined-argument-from-local) Redefining argument with the local name 'Y' enable=$enable,W0106 # (expression-not-assigned) Expression "X" is assigned to nothing + enable=$enable,E1136 # (unsubscriptable-object) Value 'X' is unsubscriptable + enable=$enable,E0602 # (undefined-variable) Undefined variable 'X' + enable=$enable,W1618 # (no-absolute-import) import missing `from __future__ import absolute_import` + enable=$enable,W0403 # (relative-import) Relative import 'Y', should be 'X.Y ' + enable=$enable,W0612 # (unused-variable) Unused variable 'X' enable=$enable,C0330 # (bad-continuation) Wrong hanging indentation before block - enable=$enable,E1136 # (unsubscriptable-object) Value 'X' is unsubscriptable - enable=$enable,W1618 # (no-absolute-import) import missing `from __future__ import absolute_import` + enable=$enable,R0123 # (literal-comparison) Comparison to literal # enable= options= @@ -316,7 +373,7 @@ get_files_to_check() { - py_files=$(find . -name '*.py' -not -path '*/build/*' -not -path './etherlab/*') + py_files=$(find . -name '*.py' -not -path '*/build/*') if [ -e .hg/skiphook ]; then echo "Skipping checks in the hook ..." exit 0 @@ -375,7 +432,9 @@ main() { get_files_to_check $@ + python3_compile_checks compile_checks + localization_checks pep8_checks_default # pep8_checks_selected diff -r e0f16317668e -r 15f18dc8b56a tests/tools/test_application.py --- a/tests/tools/test_application.py Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/tools/test_application.py Fri Nov 23 00:33:04 2018 +0100 @@ -30,6 +30,7 @@ import unittest import time +import six import pytest import wx import ddt @@ -71,7 +72,10 @@ def CheckForErrors(self): if self.exc_info is not None: # reraise catched previously exception - raise self.exc_info[0], self.exc_info[1], self.exc_info[2] + exc_type = self.exc_info[0] + exc_value = self.exc_info[1] + exc_traceback = self.exc_info[2] + six.reraise(exc_type, exc_value, exc_traceback) def ProcessEvents(self): for dummy in range(0, 30): diff -r e0f16317668e -r 15f18dc8b56a tests/traffic_lights/plc.xml --- a/tests/traffic_lights/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/traffic_lights/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -176,10 +176,10 @@ - - + + - + T#500ms @@ -337,10 +337,10 @@ ORANGE_LIGHT - - + + - + T#500ms @@ -352,15 +352,15 @@ - - + + - + - - + + @@ -369,27 +369,25 @@ - + - - + + - + SWITCH_BUTTON - - - - + + + + - - - - + + STOP @@ -400,32 +398,32 @@ - - - - + + + + - - + + - + - + - + - + @@ -440,20 +438,20 @@ - - - - + + + + - - + + - + - + @@ -482,7 +480,7 @@ - + @@ -520,7 +518,7 @@ - + @@ -540,20 +538,20 @@ - - - - + + + + - + - + @@ -562,7 +560,7 @@ - + @@ -604,7 +602,7 @@ - + @@ -657,11 +655,11 @@ - + - + @@ -682,20 +680,20 @@ - - - - + + + + - + - + - + @@ -704,9 +702,7 @@ - - - + @@ -758,7 +754,9 @@ - + + + @@ -789,11 +787,11 @@ - + - + @@ -810,9 +808,7 @@ - - - + @@ -865,7 +861,7 @@ - + @@ -895,20 +891,20 @@ - - - - + + + + - + - + - + @@ -917,7 +913,7 @@ - + @@ -943,7 +939,7 @@ - + @@ -971,17 +967,17 @@ - - - - + + + + PEDESTRIAN_BUTTON - - - - + + + + T#2s @@ -1052,7 +1048,7 @@ - + @@ -1100,9 +1096,7 @@ - - - + @@ -1129,8 +1123,8 @@ - - + + - + @@ -1266,14 +1259,14 @@ - + - - + + @@ -1281,10 +1274,10 @@ - - - - + + + + @@ -1318,15 +1311,15 @@ - - + + - - + + @@ -1334,8 +1327,8 @@ - - + + @@ -1343,8 +1336,8 @@ - - + + @@ -1363,20 +1356,20 @@ - + - - + + - - + + @@ -1384,8 +1377,8 @@ - - + + @@ -1409,55 +1402,55 @@ - + - + 1 - - - - + + + + 'SWITCH_OFF' - + 'SWITCH_ON' - - - - + + + + 'PEDESTRIAN_OFF' - + 'PEDESTRIAN_ON' - + - - + + @@ -1465,8 +1458,8 @@ - - + + @@ -1474,8 +1467,8 @@ - - + + @@ -1483,29 +1476,29 @@ - - - - + + + + 'RED_OFF' - + 'RED_ON' - + - - + + @@ -1513,8 +1506,8 @@ - - + + @@ -1522,8 +1515,8 @@ - - + + @@ -1532,28 +1525,28 @@ - + 'ORANGE_OFF' - + 'ORANGE_ON' - + - - + + @@ -1561,8 +1554,8 @@ - - + + @@ -1570,8 +1563,8 @@ - - + + @@ -1580,28 +1573,28 @@ - + 'GREEN_OFF' - + 'GREEN_ON' - + - - + + @@ -1609,8 +1602,8 @@ - - + + @@ -1618,8 +1611,8 @@ - - + + @@ -1628,28 +1621,28 @@ - + 'PEDESTRIAN_RED_OFF' - + 'PEDESTRIAN_RED_ON' - + - - + + @@ -1657,8 +1650,8 @@ - - + + @@ -1666,8 +1659,8 @@ - - + + @@ -1676,14 +1669,14 @@ - + 'PEDESTRIAN_GREEN_OFF' - + @@ -1711,14 +1704,13 @@ ]]> - - + + +Back_id and sele_id inputs of these blocks are IDs of graphic primitives in SVG file. +This is the way how elements in SVG are bound to elements in PLC program. +You can find out or edit these IDs in Inkscape.]]> diff -r e0f16317668e -r 15f18dc8b56a tests/wxHMI/plc.xml --- a/tests/wxHMI/plc.xml Thu Nov 22 23:39:54 2018 +0100 +++ b/tests/wxHMI/plc.xml Fri Nov 23 00:33:04 2018 +0100 @@ -1,7 +1,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -288,7 +288,7 @@ - + XaxisPos @@ -300,10 +300,10 @@ power - + - + XAxisMinus @@ -412,7 +412,7 @@ - + @@ -423,10 +423,10 @@ YaxisPos - + - + YAxisMinus @@ -535,7 +535,7 @@ - + @@ -604,7 +604,7 @@ - + @@ -615,10 +615,10 @@ ZaxisPos - + - + ZAxisMinus @@ -706,10 +706,10 @@ - + - + TAxisMinus @@ -800,10 +800,10 @@ - + - + DrawTestBtn @@ -967,13 +967,13 @@ - + - + @@ -982,8 +982,8 @@ - - + + @@ -1009,10 +1009,10 @@ BOOL#TRUE - + - + 'wxglade_hmi.UpdPos()' @@ -1053,25 +1053,25 @@ - + - + InitValue - + - + NotInitializedVariable - + - + - + - - - + + + @@ -1098,9 +1098,7 @@ - - - + @@ -1122,21 +1120,21 @@ 1 - + - + - + counter - + - - - - + + + + @@ -1207,8 +1205,8 @@ - - + + @@ -1245,8 +1243,8 @@ - - + + @@ -1278,24 +1276,24 @@ Out - + - + - - + + - + - - + + @@ -1304,20 +1302,20 @@ - - - - - - - - - + + + + + + + + + Period - + @@ -1450,7 +1448,7 @@ Out - + @@ -1467,7 +1465,7 @@ - + diff -r e0f16317668e -r 15f18dc8b56a util/TranslationCatalogs.py --- a/util/TranslationCatalogs.py Thu Nov 22 23:39:54 2018 +0100 +++ b/util/TranslationCatalogs.py Fri Nov 23 00:33:04 2018 +0100 @@ -55,7 +55,9 @@ global locale if locale is None: # Define locale for wx + wx.LogGui.EnableLogging(False) locale = wx.Locale(wx.LANGUAGE_DEFAULT) + wx.LogGui.EnableLogging(True) locale.AddCatalogLookupPathPrefix(locale_dir) locale.AddCatalog(domain) diff -r e0f16317668e -r 15f18dc8b56a version.py --- a/version.py Thu Nov 22 23:39:54 2018 +0100 +++ b/version.py Fri Nov 23 00:33:04 2018 +0100 @@ -79,8 +79,8 @@ info.Version = app_version info.Copyright = "" - info.Copyright += "(C) 2016-2017 Andrey Skvortsov\n" - info.Copyright += "(C) 2008-2015 Eduard Tisserant\n" + info.Copyright += "(C) 2016-2018 Andrey Skvortsov\n" + info.Copyright += "(C) 2008-2018 Eduard Tisserant\n" info.Copyright += "(C) 2008-2015 Laurent Bessard" info.WebSite = ("http://beremiz.org", "beremiz.org") @@ -126,20 +126,29 @@ "", "Chinese", - " Frank Guan , 2017", + " Frank Guan , 2018", + " Tango Wu , 2017", + " Yiwei Yan <523136664@qq.com>, 2018", + "", + + "Dutch (Netherlands)", + " Jordy van der Heijden , 2018", "", "French", + " Edouard Tisserant , 2018", " Fabien Marteau , 2017", " Laurent Bessard , 2008", "", "German", " Andrey Skvortsov , 2017", + " Hendrik Knackstedt , 2017 ", " Mark Muzenhardt , 2012", "", "Hungarian", + " Krisztián Veress , 2018", " Gábor Véninger , 2017", "", @@ -149,28 +158,44 @@ "", "Korean", + " Ikhwan Kim , 2018", " Reinhard Lee , 2012", "", - "Portuguese (Portugal)", + "Portuguese", " Pedro Coimbra , 2017", "", "Portuguese (Brazil)", + " Rodrigo Rolle , 2018", " Thiago Alves , 2017", "", + "Romanian", + " Emil Saracutu , 2018", + "", + "Russian", - " Andrey Skvortsov , 2017", + " Andrey Skvortsov , 2018", + " Sergey Surkov , 2018", + " zx_alexis , 2017", "", "Slovenian", - " Janez Pregelj , 2017", + " Janez Pregelj , 2018", + " Andraz Gregorcic , 2017", "", "Spanish", + " Carlos Guilarte , 2018", + " Yegor Yefremov , 2018", + " Jorge Rojas, 2018", " Marcial González de Armas , 2017", - " Carlos Guilarte , 2017", + " Nelson Mambre , 2017", + "", + + "Turkish", + " Ibrahim Kilicarslan , 2018", "", ) diff -r e0f16317668e -r 15f18dc8b56a xmlclass/xmlclass.py --- a/xmlclass/xmlclass.py Thu Nov 22 23:39:54 2018 +0100 +++ b/xmlclass/xmlclass.py Fri Nov 23 00:33:04 2018 +0100 @@ -627,7 +627,6 @@ value = infos["elmt_type"]["initial"]() if infos["type"] != ANY: DefaultElementClass.__setattr__(value, "tag", element_name) - value._init_() return value return [initial_value() for dummy in xrange(infos["minOccurs"])] else: