# HG changeset patch # User Sylvain Thénault # Date 1304664729 -7200 # Node ID 108c87e0538c0452280b36c9dfec81f904298f19 # Parent d3104c697adbd439094f33a0cb09a4c0d3f238c7# Parent 0a1c405384d0e4628bf9f469b5c48111c99b4d3c backport stable diff -r 0a1c405384d0 -r 108c87e0538c cwvreg.py --- a/cwvreg.py Fri May 06 08:48:26 2011 +0200 +++ b/cwvreg.py Fri May 06 08:52:09 2011 +0200 @@ -412,10 +412,8 @@ if not isinstance(view, class_deprecated)] try: view = self._select_best(views, req, rset=rset, **kwargs) - if view.linkable(): + if view is not None and view.linkable(): yield view - except NoSelectableObject: - continue except Exception: self.exception('error while trying to select %s view for %s', vid, rset) diff -r 0a1c405384d0 -r 108c87e0538c devtools/__init__.py --- a/devtools/__init__.py Fri May 06 08:48:26 2011 +0200 +++ b/devtools/__init__.py Fri May 06 08:52:09 2011 +0200 @@ -28,15 +28,17 @@ import pickle import glob import warnings +import hashlib from datetime import timedelta from os.path import (abspath, join, exists, basename, dirname, normpath, split, isfile, isabs, splitext, isdir, expanduser) from functools import partial -import hashlib from logilab.common.date import strptime from logilab.common.decorators import cached, clear_cache -from cubicweb import CW_SOFTWARE_ROOT, ConfigurationError, schema, cwconfig, BadConnectionId + +from cubicweb import ConfigurationError, ExecutionError, BadConnectionId +from cubicweb import CW_SOFTWARE_ROOT, schema, cwconfig from cubicweb.server.serverconfig import ServerConfiguration from cubicweb.etwist.twconfig import TwistedConfiguration @@ -197,7 +199,10 @@ directory from wich tests are launched or by specifying an alternative sources file using self.sourcefile. """ - sources = super(TestServerConfiguration, self).sources() + try: + sources = super(TestServerConfiguration, self).sources() + except ExecutionError: + sources = {} if not sources: sources = DEFAULT_SOURCES if 'admin' not in sources: diff -r 0a1c405384d0 -r 108c87e0538c devtools/testlib.py --- a/devtools/testlib.py Fri May 06 08:48:26 2011 +0200 +++ b/devtools/testlib.py Fri May 06 08:52:09 2011 +0200 @@ -561,6 +561,8 @@ if views: try: view = viewsvreg._select_best(views, req, rset=rset) + if view is None: + raise NoSelectableObject((req,), {'rset':rset}, views) if view.linkable(): yield view else: diff -r 0a1c405384d0 -r 108c87e0538c entities/test/unittest_wfobjs.py --- a/entities/test/unittest_wfobjs.py Fri May 06 08:48:26 2011 +0200 +++ b/entities/test/unittest_wfobjs.py Fri May 06 08:52:09 2011 +0200 @@ -165,7 +165,7 @@ user = self.user() iworkflowable = user.cw_adapt_to('IWorkflowable') iworkflowable.fire_transition('deactivate', comment=u'deactivate user') - user.clear_all_caches() + user.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'deactivated') self._test_manager_deactivate(user) trinfo = self._test_manager_deactivate(user) @@ -192,7 +192,7 @@ self.commit() iworkflowable.fire_transition('wake up') self.commit() - user.clear_all_caches() + user.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'deactivated') # XXX test managers can change state without matching transition @@ -274,14 +274,14 @@ self.assertEqual(iworkflowable.subworkflow_input_transition(), None) iworkflowable.fire_transition('swftr1', u'go') self.commit() - group.clear_all_caches() + group.cw_clear_all_caches() self.assertEqual(iworkflowable.current_state.eid, swfstate1.eid) self.assertEqual(iworkflowable.current_workflow.eid, swf.eid) self.assertEqual(iworkflowable.main_workflow.eid, mwf.eid) self.assertEqual(iworkflowable.subworkflow_input_transition().eid, swftr1.eid) iworkflowable.fire_transition('tr1', u'go') self.commit() - group.clear_all_caches() + group.cw_clear_all_caches() self.assertEqual(iworkflowable.current_state.eid, state2.eid) self.assertEqual(iworkflowable.current_workflow.eid, mwf.eid) self.assertEqual(iworkflowable.main_workflow.eid, mwf.eid) @@ -295,10 +295,10 @@ # force back to state1 iworkflowable.change_state('state1', u'gadget') iworkflowable.fire_transition('swftr1', u'au') - group.clear_all_caches() + group.cw_clear_all_caches() iworkflowable.fire_transition('tr2', u'chapeau') self.commit() - group.clear_all_caches() + group.cw_clear_all_caches() self.assertEqual(iworkflowable.current_state.eid, state3.eid) self.assertEqual(iworkflowable.current_workflow.eid, mwf.eid) self.assertEqual(iworkflowable.main_workflow.eid, mwf.eid) @@ -390,7 +390,7 @@ ): iworkflowable.fire_transition(trans) self.commit() - group.clear_all_caches() + group.cw_clear_all_caches() self.assertEqual(iworkflowable.state, nextstate) @@ -408,11 +408,11 @@ wf.add_state('asleep', initial=True) self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', {'wf': wf.eid, 'x': self.member.eid}) - self.member.clear_all_caches() + self.member.cw_clear_all_caches() iworkflowable = self.member.cw_adapt_to('IWorkflowable') self.assertEqual(iworkflowable.state, 'activated')# no change before commit self.commit() - self.member.clear_all_caches() + self.member.cw_clear_all_caches() self.assertEqual(iworkflowable.current_workflow.eid, wf.eid) self.assertEqual(iworkflowable.state, 'asleep') self.assertEqual(iworkflowable.workflow_history, ()) @@ -429,7 +429,7 @@ self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', {'wf': wf.eid, 'x': self.member.eid}) self.commit() - self.member.clear_all_caches() + self.member.cw_clear_all_caches() self.assertEqual(iworkflowable.current_workflow.eid, wf.eid) self.assertEqual(iworkflowable.state, 'asleep') self.assertEqual(parse_hist(iworkflowable.workflow_history), @@ -472,10 +472,10 @@ self.commit() self.execute('DELETE X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', {'wf': wf.eid, 'x': self.member.eid}) - self.member.clear_all_caches() + self.member.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'asleep')# no change before commit self.commit() - self.member.clear_all_caches() + self.member.cw_clear_all_caches() self.assertEqual(iworkflowable.current_workflow.name, "default user workflow") self.assertEqual(iworkflowable.state, 'activated') self.assertEqual(parse_hist(iworkflowable.workflow_history), @@ -504,13 +504,13 @@ self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', {'wf': wf.eid, 'x': user.eid}) self.commit() - user.clear_all_caches() + user.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'asleep') self.assertEqual([t.name for t in iworkflowable.possible_transitions()], ['rest']) iworkflowable.fire_transition('rest') self.commit() - user.clear_all_caches() + user.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'asleep') self.assertEqual([t.name for t in iworkflowable.possible_transitions()], ['rest']) @@ -520,7 +520,7 @@ self.commit() iworkflowable.fire_transition('rest') self.commit() - user.clear_all_caches() + user.cw_clear_all_caches() self.assertEqual(iworkflowable.state, 'dead') self.assertEqual(parse_hist(iworkflowable.workflow_history), [('asleep', 'asleep', 'rest', None), diff -r 0a1c405384d0 -r 108c87e0538c entities/wfobjs.py --- a/entities/wfobjs.py Fri May 06 08:48:26 2011 +0200 +++ b/entities/wfobjs.py Fri May 06 08:52:09 2011 +0200 @@ -326,8 +326,8 @@ result[ep.subwf_state.eid] = ep.destination and ep.destination.eid return result - def clear_all_caches(self): - super(WorkflowTransition, self).clear_all_caches() + def cw_clear_all_caches(self): + super(WorkflowTransition, self).cw_clear_all_caches() clear_cache(self, 'exit_points') diff -r 0a1c405384d0 -r 108c87e0538c entity.py --- a/entity.py Fri May 06 08:48:26 2011 +0200 +++ b/entity.py Fri May 06 08:52:09 2011 +0200 @@ -918,7 +918,7 @@ assert role self._cw_related_cache.pop('%s_%s' % (rtype, role), None) - def clear_all_caches(self): # XXX cw_clear_all_caches + def cw_clear_all_caches(self): """flush all caches on this entity. Further attributes/relations access will triggers new database queries to get back values. @@ -1000,6 +1000,10 @@ # deprecated stuff ######################################################### + @deprecated('[3.13] use entity.cw_clear_all_caches()') + def clear_all_caches(self): + return self.cw_clear_all_caches() + @deprecated('[3.9] use entity.cw_attr_value(attr)') def get_value(self, name): return self.cw_attr_value(name) diff -r 0a1c405384d0 -r 108c87e0538c etwist/server.py --- a/etwist/server.py Fri May 06 08:48:26 2011 +0200 +++ b/etwist/server.py Fri May 06 08:52:09 2011 +0200 @@ -17,14 +17,19 @@ # with CubicWeb. If not, see . """twisted server for CubicWeb web instances""" +from __future__ import with_statement + __docformat__ = "restructuredtext en" import sys import os +import os.path as osp import select import errno import traceback import threading +import re +import hashlib from os.path import join from time import mktime from datetime import date, timedelta @@ -41,7 +46,8 @@ from logilab.common.decorators import monkeypatch -from cubicweb import AuthenticationError, ConfigurationError, CW_EVENT_MANAGER +from cubicweb import (AuthenticationError, ConfigurationError, + CW_EVENT_MANAGER, CubicWebException) from cubicweb.utils import json_dumps from cubicweb.web import Redirect, DirectResponse, StatusResponse, LogOut from cubicweb.web.application import CubicWebPublisher @@ -70,13 +76,70 @@ code=http.FORBIDDEN, stream='Access forbidden') -class File(static.File): - """Prevent from listing directories""" + +class NoListingFile(static.File): def directoryListing(self): return ForbiddenDirectoryLister() -class LongTimeExpiringFile(File): +class DataLookupDirectory(NoListingFile): + def __init__(self, config, path): + self.md5_version = config.instance_md5_version() + NoListingFile.__init__(self, path) + self.config = config + self.here = path + self._defineChildResources() + if self.config.debugmode: + self.data_modconcat_basepath = '/data/??' + else: + self.data_modconcat_basepath = '/data/%s/??' % self.md5_version + + def _defineChildResources(self): + self.putChild(self.md5_version, self) + + def getChild(self, path, request): + if not path: + if request.uri.startswith(self.data_modconcat_basepath): + resource_relpath = request.uri[len(self.data_modconcat_basepath):] + if resource_relpath: + paths = resource_relpath.split(',') + try: + return ConcatFiles(self.config, paths) + except ConcatFileNotFoundError: + return self.childNotFound + return self.directoryListing() + childpath = join(self.here, path) + dirpath, rid = self.config.locate_resource(childpath) + if dirpath is None: + # resource not found + return self.childNotFound + filepath = os.path.join(dirpath, rid) + if os.path.isdir(filepath): + resource = DataLookupDirectory(self.config, childpath) + # cache resource for this segment path to avoid recomputing + # directory lookup + self.putChild(path, resource) + return resource + else: + return NoListingFile(filepath) + + +class FCKEditorResource(NoListingFile): + def __init__(self, config, path): + NoListingFile.__init__(self, path) + self.config = config + + def getChild(self, path, request): + pre_path = request.path.split('/')[1:] + if pre_path[0] == 'https': + pre_path.pop(0) + uiprops = self.config.https_uiprops + else: + uiprops = self.config.uiprops + return static.File(osp.join(uiprops['FCKEDITOR_PATH'], path)) + + +class LongTimeExpiringFile(DataLookupDirectory): """overrides static.File and sets a far future ``Expires`` date on the resouce. @@ -88,28 +151,77 @@ etc. """ + def _defineChildResources(self): + pass + def render(self, request): # XXX: Don't provide additional resource information to error responses # # the HTTP RFC recommands not going further than 1 year ahead expires = date.today() + timedelta(days=6*30) request.setHeader('Expires', generateDateTime(mktime(expires.timetuple()))) - return File.render(self, request) + return DataLookupDirectory.render(self, request) + + +class ConcatFileNotFoundError(CubicWebException): + pass + + +class ConcatFiles(LongTimeExpiringFile): + def __init__(self, config, paths): + _, ext = osp.splitext(paths[0]) + # create a unique / predictable filename + fname = 'cache_concat_' + hashlib.md5(';'.join(paths)).hexdigest() + ext + filepath = osp.join(config.appdatahome, 'uicache', fname) + LongTimeExpiringFile.__init__(self, config, filepath) + self._concat_cached_filepath(filepath, paths) + def _concat_cached_filepath(self, filepath, paths): + if not self._up_to_date(filepath, paths): + concat_data = [] + for path in paths: + # FIXME locate_resource is called twice() in debug-mode, but + # it's a @cached method + dirpath, rid = self.config.locate_resource(path) + if rid is None: + raise ConcatFileNotFoundError(path) + concat_data.append(open(osp.join(dirpath, rid)).read()) + with open(filepath, 'wb') as f: + f.write('\n'.join(concat_data)) + + def _up_to_date(self, filepath, paths): + """ + The concat-file is considered up-to-date if it exists. + In debug mode, an additional check is performed to make sure that + concat-file is more recent than all concatenated files + """ + if not osp.isfile(filepath): + return False + if self.config.debugmode: + concat_lastmod = os.stat(filepath).st_mtime + for path in paths: + dirpath, rid = self.config.locate_resource(path) + if rid is None: + raise ConcatFileNotFoundError(path) + path = osp.join(dirpath, rid) + if os.stat(path).st_mtime > concat_lastmod: + return False + return True class CubicWebRootResource(resource.Resource): def __init__(self, config, vreg=None): + resource.Resource.__init__(self) self.config = config # instantiate publisher here and not in init_publisher to get some # checks done before daemonization (eg versions consistency) self.appli = CubicWebPublisher(config, vreg=vreg) self.base_url = config['base-url'] self.https_url = config['https-url'] - self.children = {} - self.static_directories = set(('data%s' % config.instance_md5_version(), - 'data', 'static', 'fckeditor')) global MAX_POST_LENGTH MAX_POST_LENGTH = config['max-post-length'] + self.putChild('static', NoListingFile(config.static_directory)) + self.putChild('fckeditor', FCKEditorResource(self.config, '')) + self.putChild('data', DataLookupDirectory(self.config, '')) def init_publisher(self): config = self.config @@ -152,38 +264,6 @@ def getChild(self, path, request): """Indicate which resource to use to process down the URL's path""" - pre_path = request.path.split('/')[1:] - if pre_path[0] == 'https': - pre_path.pop(0) - uiprops = self.config.https_uiprops - else: - uiprops = self.config.uiprops - directory = pre_path[0] - # Anything in data/, static/, fckeditor/ and the generated versioned - # data directory is treated as static files - if directory in self.static_directories: - # take care fckeditor may appears as root directory or as a data - # subdirectory - if directory == 'static': - return File(self.config.static_directory) - if directory == 'fckeditor': - return File(uiprops['FCKEDITOR_PATH']) - if directory != 'data': - # versioned directory, use specific file with http cache - # headers so their are cached for a very long time - cls = LongTimeExpiringFile - else: - cls = File - if path == 'fckeditor': - return cls(uiprops['FCKEDITOR_PATH']) - if path == directory: # recurse - return self - datadir, path = self.config.locate_resource(path) - if datadir is None: - return self # recurse - self.debug('static file %s from %s', path, datadir) - return cls(join(datadir, path)) - # Otherwise we use this single resource return self def render(self, request): diff -r 0a1c405384d0 -r 108c87e0538c hooks/workflow.py --- a/hooks/workflow.py Fri May 06 08:48:26 2011 +0200 +++ b/hooks/workflow.py Fri May 06 08:52:09 2011 +0200 @@ -148,7 +148,7 @@ class WorkflowHook(hook.Hook): __abstract__ = True - category = 'workflow' + category = 'metadata' class SetInitialStateHook(WorkflowHook): @@ -160,21 +160,15 @@ _SetInitialStateOp(self._cw, entity=self.entity) -class PrepareStateChangeHook(WorkflowHook): - """record previous state information""" - __regid__ = 'cwdelstate' - __select__ = WorkflowHook.__select__ & hook.match_rtype('in_state') - events = ('before_delete_relation',) +class FireTransitionHook(WorkflowHook): + """check the transition is allowed and add missing information into the + TrInfo entity. - def __call__(self): - self._cw.transaction_data.setdefault('pendingrelations', []).append( - (self.eidfrom, self.rtype, self.eidto)) - - -class FireTransitionHook(WorkflowHook): - """check the transition is allowed, add missing information. Expect that: + Expect that: * wf_info_for inlined relation is set * by_transition or to_state (managers only) inlined relation is set + + Check for automatic transition to be fired at the end """ __regid__ = 'wffiretransition' __select__ = WorkflowHook.__select__ & is_instance('TrInfo') @@ -273,7 +267,7 @@ class FiredTransitionHook(WorkflowHook): - """change related entity state""" + """change related entity state and handle exit of subworkflow""" __regid__ = 'wffiretransition' __select__ = WorkflowHook.__select__ & is_instance('TrInfo') events = ('after_add_entity',) @@ -296,6 +290,7 @@ __regid__ = 'wfcheckinstate' __select__ = WorkflowHook.__select__ & hook.match_rtype('in_state') events = ('before_add_relation',) + category = 'integrity' def __call__(self): session = self._cw diff -r 0a1c405384d0 -r 108c87e0538c i18n/de.po --- a/i18n/de.po Fri May 06 08:48:26 2011 +0200 +++ b/i18n/de.po Fri May 06 08:52:09 2011 +0200 @@ -8,10 +8,10 @@ "PO-Revision-Date: 2010-09-15 14:55+0200\n" "Last-Translator: Dr. Leo \n" "Language-Team: English \n" -"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -27,8 +27,8 @@ "url: %(url)s\n" msgstr "" "\n" -"%(user)s hat den Zustand geändert von <%(previous_state)s> in <" -"%(current_state)s> für die Entität\n" +"%(user)s hat den Zustand geändert von <%(previous_state)s> in <%" +"(current_state)s> für die Entität\n" "'%(title)s'\n" "\n" "%(comment)s\n" @@ -418,8 +418,8 @@ "Can't restore relation %(rtype)s, %(role)s entity %(eid)s doesn't exist " "anymore." msgstr "" -"Kann die Relation %(rtype)s nicht wieder herstellen, die Entität %(role)s " -"%(eid)s existiert nicht mehr." +"Kann die Relation %(rtype)s nicht wieder herstellen, die Entität %(role)s %" +"(eid)s existiert nicht mehr." #, python-format msgid "" @@ -468,10 +468,10 @@ msgid "Download schema as OWL" msgstr "Herunterladen des Schemas im OWL-Format" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email-Adresse" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email-Adresse" @@ -1105,9 +1105,6 @@ msgid "add_permission" msgstr "Berechtigung hinzufügen" -msgid "add_permission_object" -msgstr "hat die Berechtigung zum Hinzufügen" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "kann hinzufügen" @@ -1116,6 +1113,9 @@ msgid "add_permission_object" msgstr "benutzt, um die Hinzufüge-Berechtigung zu festzulegen für" +msgid "add_permission_object" +msgstr "hat die Berechtigung zum Hinzufügen" + msgid "add_relation" msgstr "hinzufügen" @@ -1125,11 +1125,11 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" -"Die Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #" -"%(eidto)s wurde hinzugefügt." +"Die Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #%" +"(eidto)s wurde hinzugefügt." msgid "addrelated" msgstr "hinzufügen" @@ -1164,9 +1164,6 @@ msgid "allowed_transition" msgstr "erlaubter Übergang" -msgid "allowed_transition_object" -msgstr "ausstehende Zustände" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "ausstehende Zustände" @@ -1179,6 +1176,9 @@ msgid "allowed_transition_object" msgstr "ausstehende Zustände" +msgid "allowed_transition_object" +msgstr "ausstehende Zustände" + msgid "an electronic mail address associated to a short alias" msgstr "Eine E-Mail-Adresse wurde mit einem Alias verknüpft." @@ -1261,13 +1261,13 @@ msgid "bookmarked_by" msgstr "Lesezeichen angelegt durch" -msgid "bookmarked_by_object" -msgstr "hat Lesezeichen" - msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "verwendet Lesezeichen" +msgid "bookmarked_by_object" +msgstr "hat Lesezeichen" + msgid "bookmarks" msgstr "Lesezeichen" @@ -1305,9 +1305,6 @@ msgid "by_transition" msgstr "je Übergang" -msgid "by_transition_object" -msgstr "Übergangsinformation" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "Übergangsinformation" @@ -1320,6 +1317,9 @@ msgid "by_transition_object" msgstr "Übergangsinformation" +msgid "by_transition_object" +msgstr "Übergangsinformation" + msgid "calendar" msgstr "Kalender anzeigen" @@ -1363,8 +1363,8 @@ #, python-format msgid "" -"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=" -"%(card)s" +"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=%(card)" +"s" msgstr "" msgid "cancel" @@ -1472,10 +1472,10 @@ msgid "condition" msgstr "Bedingung" +msgctxt "RQLExpression" msgid "condition_object" msgstr "Bedingung von" -msgctxt "RQLExpression" msgid "condition_object" msgstr "Bedingung von" @@ -1485,11 +1485,11 @@ msgid "config" msgstr "" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "" @@ -1513,10 +1513,10 @@ msgid "constrained_by" msgstr "eingeschränkt durch" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Einschränkungen" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Einschränkungen" @@ -1530,10 +1530,10 @@ msgid "constraint_of" msgstr "" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "" @@ -1622,8 +1622,8 @@ msgstr "Erstelle Relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "" msgid "" @@ -1712,8 +1712,8 @@ msgstr "Erstelle Workflow-Übergang, der zum Zustand %(linkto)s führt." msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "Erstelle Workflow-Übergang des Workflows %(linkto)s" msgid "creation" @@ -1735,13 +1735,13 @@ msgid "cstrtype" msgstr "Einschränkungstyp" -msgid "cstrtype_object" -msgstr "benutzt von" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "Einschränkungstyp von" +msgid "cstrtype_object" +msgstr "benutzt von" + msgid "csv entities export" msgstr "CSV-Export von Entitäten" @@ -1866,10 +1866,10 @@ msgid "cw_for_source" msgstr "" +msgctxt "CWSource" msgid "cw_for_source_object" msgstr "" -msgctxt "CWSource" msgid "cw_for_source_object" msgstr "" @@ -1880,10 +1880,10 @@ msgid "cw_host_config_of" msgstr "" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" @@ -1894,6 +1894,7 @@ msgid "cw_schema" msgstr "" +msgctxt "CWEType" msgid "cw_schema_object" msgstr "" @@ -1901,7 +1902,7 @@ msgid "cw_schema_object" msgstr "" -msgctxt "CWEType" +msgctxt "CWRelation" msgid "cw_schema_object" msgstr "" @@ -1909,7 +1910,6 @@ msgid "cw_schema_object" msgstr "" -msgctxt "CWRelation" msgid "cw_schema_object" msgstr "" @@ -2001,10 +2001,10 @@ msgid "default_workflow" msgstr "Standard-Workflow" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "Standard-Workflow von" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "Standard-Workflow von" @@ -2084,9 +2084,6 @@ msgid "delete_permission" msgstr "Lösch-Berechtigung" -msgid "delete_permission_object" -msgstr "hat Lösch-Berechtigung" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "hat Lösch-Berechtigung für" @@ -2095,14 +2092,17 @@ msgid "delete_permission_object" msgstr "hat die Berechtigung, zu löschen" +msgid "delete_permission_object" +msgstr "hat Lösch-Berechtigung" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "Löschen der Entität %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #%(eidto)s " "gelöscht" @@ -2113,7 +2113,15 @@ msgid "description" msgstr "Beschreibung" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "Beschreibung" + +msgctxt "CWRelation" +msgid "description" +msgstr "Beschreibung" + +msgctxt "Workflow" msgid "description" msgstr "Beschreibung" @@ -2121,38 +2129,38 @@ msgid "description" msgstr "Beschreibung" -msgctxt "CWEType" -msgid "description" -msgstr "Beschreibung" - -msgctxt "CWRType" -msgid "description" -msgstr "Beschreibung" - -msgctxt "CWRelation" -msgid "description" -msgstr "Beschreibung" - -msgctxt "State" -msgid "description" -msgstr "Beschreibung" - msgctxt "Transition" msgid "description" msgstr "Beschreibung" -msgctxt "Workflow" -msgid "description" -msgstr "Beschreibung" - msgctxt "WorkflowTransition" msgid "description" msgstr "Beschreibung" +msgctxt "State" +msgid "description" +msgstr "Beschreibung" + +msgctxt "CWRType" +msgid "description" +msgstr "Beschreibung" + +msgctxt "BaseTransition" +msgid "description" +msgstr "Beschreibung" + msgid "description_format" msgstr "Format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "Format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "Format" + +msgctxt "Workflow" msgid "description_format" msgstr "Format" @@ -2160,7 +2168,15 @@ msgid "description_format" msgstr "Format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "Format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "Format" + +msgctxt "State" msgid "description_format" msgstr "Format" @@ -2168,23 +2184,7 @@ msgid "description_format" msgstr "Format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "Format" - -msgctxt "State" -msgid "description_format" -msgstr "Format" - -msgctxt "Transition" -msgid "description_format" -msgstr "Format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "Format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "Format" @@ -2207,18 +2207,18 @@ msgid "destination_state" msgstr "Zielzustand" +msgctxt "Transition" +msgid "destination_state" +msgstr "Zielzustand" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "Zielzustand" -msgctxt "Transition" -msgid "destination_state" -msgstr "Zielzustand" - +msgctxt "State" msgid "destination_state_object" msgstr "Ziel von" -msgctxt "State" msgid "destination_state_object" msgstr "Ziel von" @@ -2386,6 +2386,9 @@ msgid "external page" msgstr "externe Seite" +msgid "facet-loading-msg" +msgstr "" + msgid "facet.filters" msgstr "" @@ -2485,13 +2488,13 @@ msgid "for_user" msgstr "für Nutzer" -msgid "for_user_object" -msgstr "hat als Eigenschaft" - msgctxt "CWUser" msgid "for_user_object" msgstr "verwendet die Eigenschaften" +msgid "for_user_object" +msgstr "hat als Eigenschaft" + msgid "friday" msgstr "Freitag" @@ -2513,13 +2516,13 @@ msgid "from_entity" msgstr "Relation der Entität" -msgid "from_entity_object" -msgstr "der Entität" - msgctxt "CWEType" msgid "from_entity_object" msgstr "Subjektrelation" +msgid "from_entity_object" +msgstr "der Entität" + msgid "from_interval_start" msgstr "Von" @@ -2530,13 +2533,13 @@ msgid "from_state" msgstr "Anfangszustand" -msgid "from_state_object" -msgstr "Übergänge aus diesem Zustand" - msgctxt "State" msgid "from_state_object" msgstr "Anfangszustand von" +msgid "from_state_object" +msgstr "Übergänge aus diesem Zustand" + msgid "full text or RQL query" msgstr "Volltextsuche oder RQL-Anfrage" @@ -2585,16 +2588,16 @@ "graphical representation of the %(etype)s entity type from %(appid)s data " "model" msgstr "" -"graphische Darstellung des Datenmodells des Entitätstyps (etype)s von " -"%(appid)s" +"graphische Darstellung des Datenmodells des Entitätstyps (etype)s von %" +"(appid)s" #, python-format msgid "" "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"graphische Darstellung des Datenmodells des Relationstyps %(rtype)s von " -"%(appid)s" +"graphische Darstellung des Datenmodells des Relationstyps %(rtype)s von %" +"(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "" @@ -2624,6 +2627,9 @@ msgid "header-right" msgstr "" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "Filter verbergen" @@ -2712,13 +2718,13 @@ msgid "in_group" msgstr "gehört zu der Gruppe" -msgid "in_group_object" -msgstr "Mitglieder" - msgctxt "CWGroup" msgid "in_group_object" msgstr "enthält die Nutzer" +msgid "in_group_object" +msgstr "Mitglieder" + msgid "in_state" msgstr "Zustand" @@ -2775,10 +2781,10 @@ msgid "initial_state" msgstr "Anfangszustand" +msgctxt "State" msgid "initial_state_object" msgstr "Anfangszustand von" -msgctxt "State" msgid "initial_state_object" msgstr "Anfangszustand von" @@ -3079,11 +3085,23 @@ msgid "name" msgstr "Name" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "Name" + +msgctxt "Transition" msgid "name" msgstr "Name" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "" + +msgctxt "Workflow" +msgid "name" +msgstr "Name" + +msgctxt "CWGroup" msgid "name" msgstr "Name" @@ -3091,11 +3109,11 @@ msgid "name" msgstr "Name" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "Name" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "Name" @@ -3107,23 +3125,11 @@ msgid "name" msgstr "Name" -msgctxt "CWSource" -msgid "name" -msgstr "" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "Name" -msgctxt "Transition" -msgid "name" -msgstr "Name" - -msgctxt "Workflow" -msgid "name" -msgstr "Name" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "Name" @@ -3355,13 +3361,13 @@ msgid "prefered_form" msgstr "bevorzugte form" -msgid "prefered_form_object" -msgstr "bevorzugte form vor" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "bevorzugte form von" +msgid "prefered_form_object" +msgstr "bevorzugte form vor" + msgid "preferences" msgstr "Einstellungen" @@ -3378,13 +3384,13 @@ msgid "primary_email" msgstr "primäre E-Mail-Adresse" -msgid "primary_email_object" -msgstr "Objekt der primären E-Mail-Adresse" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primäre E-Mail-Adresse von" +msgid "primary_email_object" +msgstr "Objekt der primären E-Mail-Adresse" + msgid "profile" msgstr "Profil" @@ -3412,11 +3418,11 @@ msgid "read_permission" msgstr "Leseberechtigung" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "Leseberechtigung" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "Leseberechtigung" @@ -3424,9 +3430,6 @@ msgid "read_permission" msgstr "Leseberechtigung" -msgid "read_permission_object" -msgstr "hat eine Leseberechtigung" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "kann lesen" @@ -3435,6 +3438,9 @@ msgid "read_permission_object" msgstr "kann lesen" +msgid "read_permission_object" +msgstr "hat eine Leseberechtigung" + msgid "regexp matching host(s) to which this config applies" msgstr "" @@ -3489,13 +3495,13 @@ msgid "relation_type" msgstr "Relationstyp" -msgid "relation_type_object" -msgstr "Definition" - msgctxt "CWRType" msgid "relation_type_object" msgstr "definition" +msgid "relation_type_object" +msgstr "Definition" + msgid "relations" msgstr "Relationen" @@ -3506,10 +3512,10 @@ msgid "relations deleted" msgstr "Relationen entfernt" +msgctxt "CWRType" msgid "relations_object" msgstr "Relationen von" -msgctxt "CWRType" msgid "relations_object" msgstr "Relationen von" @@ -3526,11 +3532,11 @@ msgid "require_group" msgstr "auf Gruppe beschränkt" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "auf Gruppe beschränkt" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "auf Gruppe beschränkt" @@ -3538,10 +3544,10 @@ msgid "require_group" msgstr "auf Gruppe beschränkt" +msgctxt "CWGroup" msgid "require_group_object" msgstr "hat die Rechte" -msgctxt "CWGroup" msgid "require_group_object" msgstr "hat die Rechte" @@ -3749,10 +3755,10 @@ msgid "specializes" msgstr "spezialisiert" +msgctxt "CWEType" msgid "specializes_object" msgstr "Vorgänger von" -msgctxt "CWEType" msgid "specializes_object" msgstr "Vorgänger von" @@ -3795,13 +3801,13 @@ msgid "state_of" msgstr "Zustand von" -msgid "state_of_object" -msgstr "hat als Zustand" - msgctxt "Workflow" msgid "state_of_object" msgstr "enthält die Zustände" +msgid "state_of_object" +msgstr "hat als Zustand" + msgid "status change" msgstr "Zustand ändern" @@ -3844,20 +3850,20 @@ msgid "subworkflow_exit" msgstr "Ende des Subworkflows" -msgid "subworkflow_exit_object" -msgstr "Endzustand" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "Endzustände" -msgid "subworkflow_object" -msgstr "verwendet vom Übergang" +msgid "subworkflow_exit_object" +msgstr "Endzustand" msgctxt "Workflow" msgid "subworkflow_object" msgstr "Subworkflow von" +msgid "subworkflow_object" +msgstr "verwendet vom Übergang" + msgid "subworkflow_state" msgstr "Zustand des Subworkflows" @@ -3865,10 +3871,10 @@ msgid "subworkflow_state" msgstr "Zustand" +msgctxt "State" msgid "subworkflow_state_object" msgstr "Endzustand von" -msgctxt "State" msgid "subworkflow_state_object" msgstr "Endzustand von" @@ -3989,10 +3995,10 @@ msgid "to_entity" msgstr "für die Entität" +msgctxt "CWEType" msgid "to_entity_object" msgstr "Objekt der Relation" -msgctxt "CWEType" msgid "to_entity_object" msgstr "Objekt der Relation" @@ -4006,13 +4012,13 @@ msgid "to_state" msgstr "Zielstatus" -msgid "to_state_object" -msgstr "Übergänge zu dem Zustand" - msgctxt "State" msgid "to_state_object" msgstr "Übergang zu diesem Zustand" +msgid "to_state_object" +msgstr "Übergänge zu dem Zustand" + msgid "today" msgstr "" @@ -4060,10 +4066,10 @@ msgid "transition_of" msgstr "Übergang des/der" +msgctxt "Workflow" msgid "transition_of_object" msgstr "hat als Übergang" -msgctxt "Workflow" msgid "transition_of_object" msgstr "hat als Übergang" @@ -4080,10 +4086,6 @@ msgid "type" msgstr "Typ" -msgctxt "CWSource" -msgid "type" -msgstr "" - msgctxt "Transition" msgid "type" msgstr "Typ" @@ -4092,6 +4094,10 @@ msgid "type" msgstr "Typ" +msgctxt "CWSource" +msgid "type" +msgstr "" + msgid "type here a sparql query" msgstr "Geben sie eine sparql-Anfrage ein" @@ -4180,17 +4186,14 @@ msgid "update_permission" msgstr "Änderungsrecht" +msgctxt "CWEType" +msgid "update_permission" +msgstr "Änderungsrecht" + msgctxt "CWAttribute" msgid "update_permission" msgstr "Änderungsrecht" -msgctxt "CWEType" -msgid "update_permission" -msgstr "Änderungsrecht" - -msgid "update_permission_object" -msgstr "hat die Änderungsberechtigung" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "kann ändern" @@ -4199,6 +4202,9 @@ msgid "update_permission_object" msgstr "kann ändern" +msgid "update_permission_object" +msgstr "hat die Änderungsberechtigung" + msgid "update_relation" msgstr "aktualisieren" @@ -4242,13 +4248,13 @@ msgid "use_email" msgstr "verwendet die E-Mail-Adresse" -msgid "use_email_object" -msgstr "Adresse verwendet von" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "verwendet von" +msgid "use_email_object" +msgstr "Adresse verwendet von" + msgid "use_template_format" msgstr "Benutzung des 'cubicweb template'-Formats" @@ -4447,10 +4453,10 @@ msgid "workflow_of" msgstr "Workflow von" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "hat als Workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "hat als Workflow" diff -r 0a1c405384d0 -r 108c87e0538c i18n/en.po --- a/i18n/en.po Fri May 06 08:48:26 2011 +0200 +++ b/i18n/en.po Fri May 06 08:52:09 2011 +0200 @@ -5,13 +5,13 @@ msgstr "" "Project-Id-Version: 2.0\n" "POT-Creation-Date: 2006-01-12 17:35+CET\n" -"PO-Revision-Date: 2010-09-15 14:55+0200\n" +"PO-Revision-Date: 2011-04-29 12:57+0200\n" "Last-Translator: Sylvain Thenault \n" "Language-Team: English \n" -"Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: en\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -444,10 +444,10 @@ msgid "Download schema as OWL" msgstr "" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email address" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email address" @@ -1065,9 +1065,6 @@ msgid "add_permission" msgstr "add permission" -msgid "add_permission_object" -msgstr "has permission to add" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "can add" @@ -1076,6 +1073,9 @@ msgid "add_permission_object" msgstr "used to define add permission on" +msgid "add_permission_object" +msgstr "has permission to add" + msgid "add_relation" msgstr "add" @@ -1085,8 +1085,8 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" msgid "addrelated" @@ -1122,9 +1122,6 @@ msgid "allowed_transition" msgstr "allowed transition" -msgid "allowed_transition_object" -msgstr "incoming states" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "incoming states" @@ -1137,6 +1134,9 @@ msgid "allowed_transition_object" msgstr "incoming states" +msgid "allowed_transition_object" +msgstr "incoming states" + msgid "an electronic mail address associated to a short alias" msgstr "" @@ -1216,13 +1216,13 @@ msgid "bookmarked_by" msgstr "bookmarked by" -msgid "bookmarked_by_object" -msgstr "has bookmarks" - msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "uses bookmarks" +msgid "bookmarked_by_object" +msgstr "has bookmarks" + msgid "bookmarks" msgstr "" @@ -1260,9 +1260,6 @@ msgid "by_transition" msgstr "by transition" -msgid "by_transition_object" -msgstr "transition information" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "transition information" @@ -1275,6 +1272,9 @@ msgid "by_transition_object" msgstr "transition information" +msgid "by_transition_object" +msgstr "transition information" + msgid "calendar" msgstr "" @@ -1317,8 +1317,8 @@ #, python-format msgid "" -"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=" -"%(card)s" +"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=%(card)" +"s" msgstr "" msgid "cancel" @@ -1426,10 +1426,10 @@ msgid "condition" msgstr "condition" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condition of" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condition of" @@ -1439,11 +1439,11 @@ msgid "config" msgstr "" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "configuration" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "configuration" @@ -1467,10 +1467,10 @@ msgid "constrained_by" msgstr "constrained by" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "constraints" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "constraints" @@ -1484,10 +1484,10 @@ msgid "constraint_of" msgstr "constraint of" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "constrained by" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "constrained by" @@ -1575,8 +1575,8 @@ msgstr "creating relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "creating host configuration for source %(linkto)s" msgid "" @@ -1665,8 +1665,8 @@ msgstr "creating workflow-transition leading to state %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "creating workflow-transition of workflow %(linkto)s" msgid "creation" @@ -1688,13 +1688,13 @@ msgid "cstrtype" msgstr "constraint type" -msgid "cstrtype_object" -msgstr "used by" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "constraint type of" +msgid "cstrtype_object" +msgstr "used by" + msgid "csv entities export" msgstr "" @@ -1821,10 +1821,10 @@ msgid "cw_for_source" msgstr "for source" +msgctxt "CWSource" msgid "cw_for_source_object" msgstr "mapping" -msgctxt "CWSource" msgid "cw_for_source_object" msgstr "mapping" @@ -1835,10 +1835,10 @@ msgid "cw_host_config_of" msgstr "source" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "host configuration" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "host configuration" @@ -1849,6 +1849,7 @@ msgid "cw_schema" msgstr "maps" +msgctxt "CWEType" msgid "cw_schema_object" msgstr "mapped by" @@ -1856,7 +1857,7 @@ msgid "cw_schema_object" msgstr "mapped by" -msgctxt "CWEType" +msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mapped by" @@ -1864,7 +1865,6 @@ msgid "cw_schema_object" msgstr "mapped by" -msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mapped by" @@ -1956,10 +1956,10 @@ msgid "default_workflow" msgstr "default workflow" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "default workflow of" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "default workflow of" @@ -2035,9 +2035,6 @@ msgid "delete_permission" msgstr "delete_permission" -msgid "delete_permission_object" -msgstr "has permission to delete" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "has permission to delete" @@ -2046,14 +2043,17 @@ msgid "delete_permission_object" msgstr "has permission to delete" +msgid "delete_permission_object" +msgstr "has permission to delete" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" msgid "depends on the constraint type" @@ -2062,7 +2062,15 @@ msgid "description" msgstr "description" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "description" + +msgctxt "CWRelation" +msgid "description" +msgstr "description" + +msgctxt "Workflow" msgid "description" msgstr "description" @@ -2070,38 +2078,38 @@ msgid "description" msgstr "description" -msgctxt "CWEType" -msgid "description" -msgstr "description" - -msgctxt "CWRType" -msgid "description" -msgstr "description" - -msgctxt "CWRelation" -msgid "description" -msgstr "description" - -msgctxt "State" -msgid "description" -msgstr "description" - msgctxt "Transition" msgid "description" msgstr "description" -msgctxt "Workflow" -msgid "description" -msgstr "description" - msgctxt "WorkflowTransition" msgid "description" msgstr "description" +msgctxt "State" +msgid "description" +msgstr "description" + +msgctxt "CWRType" +msgid "description" +msgstr "description" + +msgctxt "BaseTransition" +msgid "description" +msgstr "description" + msgid "description_format" msgstr "format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "format" + +msgctxt "Workflow" msgid "description_format" msgstr "format" @@ -2109,7 +2117,15 @@ msgid "description_format" msgstr "format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "format" + +msgctxt "State" msgid "description_format" msgstr "format" @@ -2117,23 +2133,7 @@ msgid "description_format" msgstr "format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "format" - -msgctxt "State" -msgid "description_format" -msgstr "format" - -msgctxt "Transition" -msgid "description_format" -msgstr "format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "format" @@ -2154,18 +2154,18 @@ msgid "destination_state" msgstr "destination state" +msgctxt "Transition" +msgid "destination_state" +msgstr "destination state" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "destination state" -msgctxt "Transition" -msgid "destination_state" -msgstr "destination state" - +msgctxt "State" msgid "destination_state_object" msgstr "destination of" -msgctxt "State" msgid "destination_state_object" msgstr "destination of" @@ -2328,6 +2328,9 @@ msgid "external page" msgstr "" +msgid "facet-loading-msg" +msgstr "processing, please wait" + msgid "facet.filters" msgstr "filter" @@ -2427,13 +2430,13 @@ msgid "for_user" msgstr "for user" -msgid "for_user_object" -msgstr "use properties" - msgctxt "CWUser" msgid "for_user_object" msgstr "property of" +msgid "for_user_object" +msgstr "use properties" + msgid "friday" msgstr "" @@ -2455,13 +2458,13 @@ msgid "from_entity" msgstr "from entity" -msgid "from_entity_object" -msgstr "subjet relation" - msgctxt "CWEType" msgid "from_entity_object" msgstr "subjec relation" +msgid "from_entity_object" +msgstr "subjet relation" + msgid "from_interval_start" msgstr "from" @@ -2472,10 +2475,10 @@ msgid "from_state" msgstr "from state" +msgctxt "State" msgid "from_state_object" msgstr "transitions from this state" -msgctxt "State" msgid "from_state_object" msgstr "transitions from this state" @@ -2559,6 +2562,9 @@ msgid "header-right" msgstr "header (right)" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "" @@ -2639,10 +2645,10 @@ msgid "in_group" msgstr "in group" +msgctxt "CWGroup" msgid "in_group_object" msgstr "contains" -msgctxt "CWGroup" msgid "in_group_object" msgstr "contains" @@ -2700,10 +2706,10 @@ msgid "initial_state" msgstr "initial state" +msgctxt "State" msgid "initial_state_object" msgstr "initial state of" -msgctxt "State" msgid "initial_state_object" msgstr "initial state of" @@ -2992,11 +2998,23 @@ msgid "name" msgstr "" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "name" + +msgctxt "Transition" msgid "name" msgstr "name" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "name" + +msgctxt "Workflow" +msgid "name" +msgstr "name" + +msgctxt "CWGroup" msgid "name" msgstr "name" @@ -3004,11 +3022,11 @@ msgid "name" msgstr "name" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "name" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "name" @@ -3020,23 +3038,11 @@ msgid "name" msgstr "name" -msgctxt "CWSource" -msgid "name" -msgstr "name" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "name" -msgctxt "Transition" -msgid "name" -msgstr "name" - -msgctxt "Workflow" -msgid "name" -msgstr "name" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "name" @@ -3265,10 +3271,10 @@ msgid "prefered_form" msgstr "prefered form" +msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "prefered over" -msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "prefered over" @@ -3288,10 +3294,10 @@ msgid "primary_email" msgstr "primary email" +msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primary email of" -msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primary email of" @@ -3322,11 +3328,11 @@ msgid "read_permission" msgstr "can be read by" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "read permission" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "read permission" @@ -3334,9 +3340,6 @@ msgid "read_permission" msgstr "read permission" -msgid "read_permission_object" -msgstr "has permission to read" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "can be read by" @@ -3345,6 +3348,9 @@ msgid "read_permission_object" msgstr "can be read by" +msgid "read_permission_object" +msgstr "has permission to read" + msgid "regexp matching host(s) to which this config applies" msgstr "" @@ -3399,10 +3405,10 @@ msgid "relation_type" msgstr "relation type" +msgctxt "CWRType" msgid "relation_type_object" msgstr "relation definitions" -msgctxt "CWRType" msgid "relation_type_object" msgstr "relation definitions" @@ -3416,10 +3422,10 @@ msgid "relations deleted" msgstr "" +msgctxt "CWRType" msgid "relations_object" msgstr "constrained by" -msgctxt "CWRType" msgid "relations_object" msgstr "constrained by" @@ -3436,11 +3442,11 @@ msgid "require_group" msgstr "require group" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "require group" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "require group" @@ -3448,10 +3454,10 @@ msgid "require_group" msgstr "require group" +msgctxt "CWGroup" msgid "require_group_object" msgstr "required by" -msgctxt "CWGroup" msgid "require_group_object" msgstr "required by" @@ -3649,10 +3655,10 @@ msgid "specializes" msgstr "specializes" +msgctxt "CWEType" msgid "specializes_object" msgstr "specialized by" -msgctxt "CWEType" msgid "specializes_object" msgstr "specialized by" @@ -3693,10 +3699,10 @@ msgid "state_of" msgstr "state of" +msgctxt "Workflow" msgid "state_of_object" msgstr "use states" -msgctxt "Workflow" msgid "state_of_object" msgstr "use states" @@ -3740,17 +3746,17 @@ msgid "subworkflow_exit" msgstr "subworkflow exit" -msgid "subworkflow_exit_object" -msgstr "subworkflow exit of" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "subworkflow exit of" +msgid "subworkflow_exit_object" +msgstr "subworkflow exit of" + +msgctxt "Workflow" msgid "subworkflow_object" msgstr "subworkflow of" -msgctxt "Workflow" msgid "subworkflow_object" msgstr "subworkflow of" @@ -3761,10 +3767,10 @@ msgid "subworkflow_state" msgstr "subworkflow state" +msgctxt "State" msgid "subworkflow_state_object" msgstr "exit point" -msgctxt "State" msgid "subworkflow_state_object" msgstr "exit point" @@ -3884,10 +3890,10 @@ msgid "to_entity" msgstr "to entity" +msgctxt "CWEType" msgid "to_entity_object" msgstr "object relations" -msgctxt "CWEType" msgid "to_entity_object" msgstr "object relations" @@ -3901,10 +3907,10 @@ msgid "to_state" msgstr "to state" +msgctxt "State" msgid "to_state_object" msgstr "transitions to this state" -msgctxt "State" msgid "to_state_object" msgstr "transitions to this state" @@ -3955,10 +3961,10 @@ msgid "transition_of" msgstr "transition of" +msgctxt "Workflow" msgid "transition_of_object" msgstr "use transitions" -msgctxt "Workflow" msgid "transition_of_object" msgstr "use transitions" @@ -3975,10 +3981,6 @@ msgid "type" msgstr "type" -msgctxt "CWSource" -msgid "type" -msgstr "type" - msgctxt "Transition" msgid "type" msgstr "type" @@ -3987,6 +3989,10 @@ msgid "type" msgstr "type" +msgctxt "CWSource" +msgid "type" +msgstr "type" + msgid "type here a sparql query" msgstr "" @@ -4075,17 +4081,14 @@ msgid "update_permission" msgstr "can be updated by" +msgctxt "CWEType" +msgid "update_permission" +msgstr "can be updated by" + msgctxt "CWAttribute" msgid "update_permission" msgstr "can be updated by" -msgctxt "CWEType" -msgid "update_permission" -msgstr "can be updated by" - -msgid "update_permission_object" -msgstr "has permission to update" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "has permission to update" @@ -4094,6 +4097,9 @@ msgid "update_permission_object" msgstr "has permission to update" +msgid "update_permission_object" +msgstr "has permission to update" + msgid "update_relation" msgstr "update" @@ -4134,10 +4140,10 @@ msgid "use_email" msgstr "use email" +msgctxt "EmailAddress" msgid "use_email_object" msgstr "used by" -msgctxt "EmailAddress" msgid "use_email_object" msgstr "used by" @@ -4329,10 +4335,10 @@ msgid "workflow_of" msgstr "workflow of" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "may use workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "may use workflow" diff -r 0a1c405384d0 -r 108c87e0538c i18n/es.po --- a/i18n/es.po Fri May 06 08:48:26 2011 +0200 +++ b/i18n/es.po Fri May 06 08:52:09 2011 +0200 @@ -8,10 +8,10 @@ "PO-Revision-Date: 2011-05-03 12:53-0600\n" "Last-Translator: CreaLibre \n" "Language-Team: es \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" #, python-format msgid "" @@ -25,8 +25,8 @@ "url: %(url)s\n" msgstr "" "\n" -"%(user)s ha cambiado su estado de <%(previous_state)s> hacia <" -"%(current_state)s> por la entidad\n" +"%(user)s ha cambiado su estado de <%(previous_state)s> hacia <%" +"(current_state)s> por la entidad\n" "'%(title)s'\n" "\n" "%(comment)s\n" @@ -468,10 +468,10 @@ msgid "Download schema as OWL" msgstr "Descargar el esquema en formato OWL" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Correo Electrónico" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Correo Electrónico" @@ -1115,9 +1115,6 @@ msgid "add_permission" msgstr "Permiso de agregar" -msgid "add_permission_object" -msgstr "tiene permiso de agregar" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "tiene permiso de agregar" @@ -1126,6 +1123,9 @@ msgid "add_permission_object" msgstr "tiene permiso de agregar" +msgid "add_permission_object" +msgstr "tiene permiso de agregar" + msgid "add_relation" msgstr "agregar" @@ -1135,8 +1135,8 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "la relación %(rtype)s de %(frometype)s #%(eidfrom)s a %(toetype)s #%(eidto)s " "ha sido agregada" @@ -1174,9 +1174,6 @@ msgid "allowed_transition" msgstr "transiciones autorizadas" -msgid "allowed_transition_object" -msgstr "Estados de entrada" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "transición autorizada de" @@ -1189,6 +1186,9 @@ msgid "allowed_transition_object" msgstr "transición autorizada de" +msgid "allowed_transition_object" +msgstr "Estados de entrada" + msgid "an electronic mail address associated to a short alias" msgstr "una dirección electrónica asociada a este alias" @@ -1272,10 +1272,10 @@ msgid "bookmarked_by" msgstr "está en los Favoritos de" +msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "tiene como Favoritos" -msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "tiene como Favoritos" @@ -1316,9 +1316,6 @@ msgid "by_transition" msgstr "transición" -msgid "by_transition_object" -msgstr "cambio de estados" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "tiene como información" @@ -1331,6 +1328,9 @@ msgid "by_transition_object" msgstr "tiene como información" +msgid "by_transition_object" +msgstr "cambio de estados" + msgid "calendar" msgstr "mostrar un calendario" @@ -1373,8 +1373,8 @@ #, python-format msgid "" -"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=" -"%(card)s" +"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=%(card)" +"s" msgstr "" "no puede poner 'inlined' = True, %(stype)s %(rtype)s %(otype)s tiene " "cardinalidad %(card)s" @@ -1486,10 +1486,10 @@ msgid "condition" msgstr "condición" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condición de" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condición de" @@ -1499,11 +1499,11 @@ msgid "config" msgstr "configuración" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "configuración" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "configuración" @@ -1527,10 +1527,10 @@ msgid "constrained_by" msgstr "Restricción impuesta por" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Restricción de" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Restricción de" @@ -1544,10 +1544,10 @@ msgid "constraint_of" msgstr "restricción de" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "restringida por" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "restringida por" @@ -1641,7 +1641,6 @@ msgid "creating CWRelation (CWRelation relation_type CWRType %(linkto)s)" msgstr "Creación de la relación %(linkto)s" -msgid "" "creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " "%(linkto)s)" msgstr "creación de una configuración host para la fuente %(linkto)s" @@ -1736,8 +1735,8 @@ "Creación de una Transición Workflow permitida desde el estado %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "Creación de una Transición Workflow del Workflow %(linkto)s" msgid "creation" @@ -1759,13 +1758,13 @@ msgid "cstrtype" msgstr "Tipo" -msgid "cstrtype_object" -msgstr "utilizado por" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "Tipo de restricciones" +msgid "cstrtype_object" +msgstr "utilizado por" + msgid "csv entities export" msgstr "Exportar entidades en csv" @@ -1895,10 +1894,10 @@ msgid "cw_for_source" msgstr "fuente" +msgctxt "CWSource" msgid "cw_for_source_object" msgstr "elemento de mapeo" -msgctxt "CWSource" msgid "cw_for_source_object" msgstr "elemento de mapeo" @@ -1909,10 +1908,10 @@ msgid "cw_host_config_of" msgstr "configuración del host de" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "tiene la configuración del host" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "tiene la configuración del host" @@ -1923,6 +1922,7 @@ msgid "cw_schema" msgstr "esquema" +msgctxt "CWEType" msgid "cw_schema_object" msgstr "mapeado por" @@ -1930,7 +1930,7 @@ msgid "cw_schema_object" msgstr "mapeado por" -msgctxt "CWEType" +msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mapeado por" @@ -1938,7 +1938,6 @@ msgid "cw_schema_object" msgstr "mapeado por" -msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mapeado por" @@ -2031,10 +2030,10 @@ msgid "default_workflow" msgstr "Workflow por defecto" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "Workflow por defecto de" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "Workflow por defecto de" @@ -2120,9 +2119,6 @@ msgid "delete_permission" msgstr "Permiso de eliminar" -msgid "delete_permission_object" -msgstr "posee permiso para eliminar" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "puede eliminar" @@ -2131,14 +2127,17 @@ msgid "delete_permission_object" msgstr "puede eliminar" +msgid "delete_permission_object" +msgstr "posee permiso para eliminar" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "Eliminación de la entidad %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "La relación %(rtype)s de %(frometype)s #%(eidfrom)s a %(toetype)s #%(eidto)s " "ha sido suprimida." @@ -2149,7 +2148,15 @@ msgid "description" msgstr "Descripción" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "Descripción" + +msgctxt "CWRelation" +msgid "description" +msgstr "Descripción" + +msgctxt "Workflow" msgid "description" msgstr "Descripción" @@ -2157,38 +2164,38 @@ msgid "description" msgstr "Descripción" -msgctxt "CWEType" -msgid "description" -msgstr "Descripción" - -msgctxt "CWRType" -msgid "description" -msgstr "Descripción" - -msgctxt "CWRelation" -msgid "description" -msgstr "Descripción" - -msgctxt "State" -msgid "description" -msgstr "Descripción" - msgctxt "Transition" msgid "description" msgstr "Descripción" -msgctxt "Workflow" -msgid "description" -msgstr "Descripción" - msgctxt "WorkflowTransition" msgid "description" msgstr "Descripción" +msgctxt "State" +msgid "description" +msgstr "Descripción" + +msgctxt "CWRType" +msgid "description" +msgstr "Descripción" + +msgctxt "BaseTransition" +msgid "description" +msgstr "Descripción" + msgid "description_format" msgstr "Formato" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "Formato" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "Formato" + +msgctxt "Workflow" msgid "description_format" msgstr "Formato" @@ -2196,7 +2203,15 @@ msgid "description_format" msgstr "Formato" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "Formato" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "Formato" + +msgctxt "State" msgid "description_format" msgstr "Formato" @@ -2204,23 +2219,7 @@ msgid "description_format" msgstr "Formato" -msgctxt "CWRelation" -msgid "description_format" -msgstr "Formato" - -msgctxt "State" -msgid "description_format" -msgstr "Formato" - -msgctxt "Transition" -msgid "description_format" -msgstr "Formato" - -msgctxt "Workflow" -msgid "description_format" -msgstr "Formato" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "Formato" @@ -2246,21 +2245,21 @@ msgid "destination_state" msgstr "Estado destino" +msgctxt "Transition" +msgid "destination_state" +msgstr "Estado destino" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "Estado destino" -msgctxt "Transition" -msgid "destination_state" -msgstr "Estado destino" - -msgid "destination_state_object" -msgstr "Destino de" - msgctxt "State" msgid "destination_state_object" msgstr "Estado final de" +msgid "destination_state_object" +msgstr "Destino de" + msgid "detach attached file" msgstr "soltar el archivo existente" @@ -2429,6 +2428,9 @@ msgid "external page" msgstr "Página externa" +msgid "facet-loading-msg" +msgstr "" + msgid "facet.filters" msgstr "Filtros" @@ -2528,13 +2530,13 @@ msgid "for_user" msgstr "Propiedad del Usuario" -msgid "for_user_object" -msgstr "Utiliza las propiedades" - msgctxt "CWUser" msgid "for_user_object" msgstr "Tiene como preferencia" +msgid "for_user_object" +msgstr "Utiliza las propiedades" + msgid "friday" msgstr "Viernes" @@ -2556,13 +2558,13 @@ msgid "from_entity" msgstr "Relación de la entidad" -msgid "from_entity_object" -msgstr "Relación sujeto" - msgctxt "CWEType" msgid "from_entity_object" msgstr "Entidad de" +msgid "from_entity_object" +msgstr "Relación sujeto" + msgid "from_interval_start" msgstr "De" @@ -2573,13 +2575,13 @@ msgid "from_state" msgstr "Estado de Inicio" -msgid "from_state_object" -msgstr "Transiciones desde este estado" - msgctxt "State" msgid "from_state_object" msgstr "Estado de Inicio de" +msgid "from_state_object" +msgstr "Transiciones desde este estado" + msgid "full text or RQL query" msgstr "Texto de búsqueda o demanda RQL" @@ -2636,8 +2638,8 @@ "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"Representación gráfica del modelo de datos para el tipo de relación " -"%(rtype)s de %(appid)s" +"Representación gráfica del modelo de datos para el tipo de relación %(rtype)" +"s de %(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "Grupo en el cual el usuario debe estar lograr la transición" @@ -2666,6 +2668,9 @@ msgid "header-right" msgstr "encabezado (derecho)" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "Esconder el filtro" @@ -2755,13 +2760,13 @@ msgid "in_group" msgstr "Forma parte del grupo" -msgid "in_group_object" -msgstr "Miembros" - msgctxt "CWGroup" msgid "in_group_object" msgstr "Contiene los usuarios" +msgid "in_group_object" +msgstr "Miembros" + msgid "in_state" msgstr "Estado" @@ -2817,10 +2822,10 @@ msgid "initial_state" msgstr "Estado inicial" +msgctxt "State" msgid "initial_state_object" msgstr "Estado inicial de" -msgctxt "State" msgid "initial_state_object" msgstr "Estado inicial de" @@ -3120,11 +3125,23 @@ msgid "name" msgstr "Nombre" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "Nombre" + +msgctxt "Transition" msgid "name" msgstr "Nombre" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "" + +msgctxt "Workflow" +msgid "name" +msgstr "Nombre" + +msgctxt "CWGroup" msgid "name" msgstr "Nombre" @@ -3132,13 +3149,13 @@ msgid "name" msgstr "Nombre" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "Nombre" -msgctxt "CWGroup" +msgctxt "State" msgid "name" -msgstr "Nombre" +msgstr "nombre" msgctxt "CWPermission" msgid "name" @@ -3148,23 +3165,11 @@ msgid "name" msgstr "Nombre" -msgctxt "CWSource" -msgid "name" -msgstr "nombre" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "Nombre" -msgctxt "Transition" -msgid "name" -msgstr "Nombre" - -msgctxt "Workflow" -msgid "name" -msgstr "Nombre" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "Nombre" @@ -3396,13 +3401,13 @@ msgid "prefered_form" msgstr "Email principal" -msgid "prefered_form_object" -msgstr "Formato preferido sobre" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "Email principal de" +msgid "prefered_form_object" +msgstr "Formato preferido sobre" + msgid "preferences" msgstr "Preferencias" @@ -3419,13 +3424,13 @@ msgid "primary_email" msgstr "Dirección principal de correo electrónico" -msgid "primary_email_object" -msgstr "Dirección de email principal (objeto)" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "Dirección principal de correo electrónico de" +msgid "primary_email_object" +msgstr "Dirección de email principal (objeto)" + msgid "profile" msgstr "perfil" @@ -3453,11 +3458,11 @@ msgid "read_permission" msgstr "Permiso de lectura" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "Permiso de Lectura" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "Permiso de Lectura" @@ -3465,9 +3470,6 @@ msgid "read_permission" msgstr "Permiso de Lectura" -msgid "read_permission_object" -msgstr "Tiene acceso de lectura a" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "Puede leer" @@ -3476,6 +3478,9 @@ msgid "read_permission_object" msgstr "Puede leer" +msgid "read_permission_object" +msgstr "Tiene acceso de lectura a" + msgid "regexp matching host(s) to which this config applies" msgstr "" "expresión regular de los nombres de hosts a los cuales esta configuración " @@ -3538,10 +3543,10 @@ msgid "relation_type" msgstr "Tipo de Relación" +msgctxt "CWRType" msgid "relation_type_object" msgstr "Definición de Relaciones" -msgctxt "CWRType" msgid "relation_type_object" msgstr "Definición de Relaciones" @@ -3555,10 +3560,10 @@ msgid "relations deleted" msgstr "Relaciones Eliminadas" +msgctxt "CWRType" msgid "relations_object" msgstr "relaciones de" -msgctxt "CWRType" msgid "relations_object" msgstr "relaciones de" @@ -3575,11 +3580,11 @@ msgid "require_group" msgstr "Restringida al Grupo" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "Restringida al Grupo" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "Restringida al Grupo" @@ -3587,10 +3592,10 @@ msgid "require_group" msgstr "Restringida al Grupo" +msgctxt "CWGroup" msgid "require_group_object" msgstr "Posee derechos sobre" -msgctxt "CWGroup" msgid "require_group_object" msgstr "Posee derechos sobre" @@ -3799,10 +3804,10 @@ msgid "specializes" msgstr "Especializa" +msgctxt "CWEType" msgid "specializes_object" msgstr "Especializado por" -msgctxt "CWEType" msgid "specializes_object" msgstr "Especializado por" @@ -3845,10 +3850,10 @@ msgid "state_of" msgstr "Estado de" +msgctxt "Workflow" msgid "state_of_object" msgstr "Tiene por Estado" -msgctxt "Workflow" msgid "state_of_object" msgstr "Tiene por Estado" @@ -3894,17 +3899,17 @@ msgid "subworkflow_exit" msgstr "Salida del Sub-Workflow" -msgid "subworkflow_exit_object" -msgstr "Salida Sub-Workflow de" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "Salida Sub-Workflow de" +msgid "subworkflow_exit_object" +msgstr "Salida Sub-Workflow de" + +msgctxt "Workflow" msgid "subworkflow_object" msgstr "Sub-Workflow de" -msgctxt "Workflow" msgid "subworkflow_object" msgstr "Sub-Workflow de" @@ -3915,10 +3920,10 @@ msgid "subworkflow_state" msgstr "Estado de Sub-Workflow" +msgctxt "State" msgid "subworkflow_state_object" msgstr "Estado de Salida de" -msgctxt "State" msgid "subworkflow_state_object" msgstr "Estado de Salida de" @@ -4039,10 +4044,10 @@ msgid "to_entity" msgstr "Por la entidad" +msgctxt "CWEType" msgid "to_entity_object" msgstr "Objeto de la Relación" -msgctxt "CWEType" msgid "to_entity_object" msgstr "Objeto de la Relación" @@ -4056,10 +4061,10 @@ msgid "to_state" msgstr "Hacia el Estado" +msgctxt "State" msgid "to_state_object" msgstr "Transición hacia este Estado" -msgctxt "State" msgid "to_state_object" msgstr "Transición hacia este Estado" @@ -4110,10 +4115,10 @@ msgid "transition_of" msgstr "Transición de" +msgctxt "Workflow" msgid "transition_of_object" msgstr "Utiliza las transiciones" -msgctxt "Workflow" msgid "transition_of_object" msgstr "Utiliza las transiciones" @@ -4142,6 +4147,10 @@ msgid "type" msgstr "Tipo" +msgctxt "CWSource" +msgid "type" +msgstr "" + msgid "type here a sparql query" msgstr "Escriba aquí su consulta en Sparql" @@ -4230,17 +4239,14 @@ msgid "update_permission" msgstr "Puede ser modificado por" +msgctxt "CWEType" +msgid "update_permission" +msgstr "Puede ser modificado por" + msgctxt "CWAttribute" msgid "update_permission" msgstr "Puede ser modificado por" -msgctxt "CWEType" -msgid "update_permission" -msgstr "Puede ser modificado por" - -msgid "update_permission_object" -msgstr "Tiene permiso de modificar" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "Puede modificar" @@ -4249,6 +4255,9 @@ msgid "update_permission_object" msgstr "Puede modificar" +msgid "update_permission_object" +msgstr "Tiene permiso de modificar" + msgid "update_relation" msgstr "Modificar" @@ -4292,13 +4301,13 @@ msgid "use_email" msgstr "Usa el Correo Electrónico" -msgid "use_email_object" -msgstr "Email utilizado por" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "Utilizado por" +msgid "use_email_object" +msgstr "Email utilizado por" + msgid "use_template_format" msgstr "Utilización del formato 'cubicweb template'" @@ -4496,10 +4505,10 @@ msgid "workflow_of" msgstr "Workflow de" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "Utiliza el Workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "Utiliza el Workflow" diff -r 0a1c405384d0 -r 108c87e0538c i18n/fr.po --- a/i18n/fr.po Fri May 06 08:48:26 2011 +0200 +++ b/i18n/fr.po Fri May 06 08:52:09 2011 +0200 @@ -4,13 +4,13 @@ msgid "" msgstr "" "Project-Id-Version: cubicweb 2.46.0\n" -"PO-Revision-Date: 2011-01-03 14:35+0100\n" +"PO-Revision-Date: 2011-04-29 12:57+0200\n" "Last-Translator: Logilab Team \n" "Language-Team: fr \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" #, python-format msgid "" @@ -466,10 +466,10 @@ msgid "Download schema as OWL" msgstr "Télécharger le schéma au format OWL" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Adresse électronique" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Adresse électronique" @@ -1113,9 +1113,6 @@ msgid "add_permission" msgstr "permission d'ajout" -msgid "add_permission_object" -msgstr "a la permission d'ajouter" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "a la permission d'ajouter" @@ -1124,6 +1121,9 @@ msgid "add_permission_object" msgstr "a la permission d'ajouter" +msgid "add_permission_object" +msgstr "a la permission d'ajouter" + msgid "add_relation" msgstr "ajouter" @@ -1133,11 +1133,11 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" -"la relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #" -"%(eidto)s a été ajoutée" +"la relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #%" +"(eidto)s a été ajoutée" msgid "addrelated" msgstr "ajouter" @@ -1172,9 +1172,6 @@ msgid "allowed_transition" msgstr "transitions autorisées" -msgid "allowed_transition_object" -msgstr "états en entrée" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "transition autorisée de" @@ -1187,6 +1184,9 @@ msgid "allowed_transition_object" msgstr "transition autorisée de" +msgid "allowed_transition_object" +msgstr "états en entrée" + msgid "an electronic mail address associated to a short alias" msgstr "une adresse électronique associée à un alias" @@ -1270,10 +1270,10 @@ msgid "bookmarked_by" msgstr "utilisé par" +msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "utilise le(s) signet(s)" -msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "utilise le(s) signet(s)" @@ -1315,9 +1315,6 @@ msgid "by_transition" msgstr "transition" -msgid "by_transition_object" -msgstr "changement d'états" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "a pour information" @@ -1330,6 +1327,9 @@ msgid "by_transition_object" msgstr "a pour information" +msgid "by_transition_object" +msgstr "changement d'états" + msgid "calendar" msgstr "afficher un calendrier" @@ -1372,8 +1372,8 @@ #, python-format msgid "" -"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=" -"%(card)s" +"can't set inlined=True, %(stype)s %(rtype)s %(otype)s has cardinality=%(card)" +"s" msgstr "" "ne peut mettre 'inlined'=Vrai, %(stype)s %(rtype)s %(otype)s a pour " "cardinalité %(card)s" @@ -1485,10 +1485,10 @@ msgid "condition" msgstr "condition" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condition de" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condition de" @@ -1498,11 +1498,11 @@ msgid "config" msgstr "configuration" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "configuration" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "configuration" @@ -1526,10 +1526,10 @@ msgid "constrained_by" msgstr "contraint par" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "contrainte de" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "contrainte de" @@ -1543,10 +1543,10 @@ msgid "constraint_of" msgstr "contrainte de" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "contraint par" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "contraint par" @@ -1642,8 +1642,8 @@ msgstr "création relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "création d'une configuration d'hôte pour la source %(linkto)s" msgid "" @@ -1736,8 +1736,8 @@ msgstr "création d'une transition workflow autorisée depuis l'état %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "création d'une transition workflow du workflow %(linkto)s" msgid "creation" @@ -1759,13 +1759,13 @@ msgid "cstrtype" msgstr "type" -msgid "cstrtype_object" -msgstr "utilisé par" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "type des contraintes" +msgid "cstrtype_object" +msgstr "utilisé par" + msgid "csv entities export" msgstr "export d'entités en CSV" @@ -1898,10 +1898,10 @@ msgid "cw_for_source" msgstr "source" +msgctxt "CWSource" msgid "cw_for_source_object" msgstr "élément de mapping" -msgctxt "CWSource" msgid "cw_for_source_object" msgstr "élément de mapping" @@ -1912,10 +1912,10 @@ msgid "cw_host_config_of" msgstr "host configuration of" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "has host configuration" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "has host configuration" @@ -1926,6 +1926,7 @@ msgid "cw_schema" msgstr "schéma" +msgctxt "CWEType" msgid "cw_schema_object" msgstr "mappé par" @@ -1933,7 +1934,7 @@ msgid "cw_schema_object" msgstr "mappé par" -msgctxt "CWEType" +msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mappé par" @@ -1941,7 +1942,6 @@ msgid "cw_schema_object" msgstr "mappé par" -msgctxt "CWRelation" msgid "cw_schema_object" msgstr "mappé par" @@ -2033,10 +2033,10 @@ msgid "default_workflow" msgstr "workflow par défaut" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "workflow par défaut de" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "workflow par défaut de" @@ -2119,9 +2119,6 @@ msgid "delete_permission" msgstr "permission de supprimer" -msgid "delete_permission_object" -msgstr "a la permission de supprimer" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "peut supprimer" @@ -2130,14 +2127,17 @@ msgid "delete_permission_object" msgstr "peut supprimer" +msgid "delete_permission_object" +msgstr "a la permission de supprimer" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "suppression de l'entité %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #%(eidto)s " "supprimée" @@ -2148,7 +2148,15 @@ msgid "description" msgstr "description" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "description" + +msgctxt "CWRelation" +msgid "description" +msgstr "description" + +msgctxt "Workflow" msgid "description" msgstr "description" @@ -2156,38 +2164,38 @@ msgid "description" msgstr "description" -msgctxt "CWEType" -msgid "description" -msgstr "description" - -msgctxt "CWRType" -msgid "description" -msgstr "description" - -msgctxt "CWRelation" -msgid "description" -msgstr "description" - -msgctxt "State" -msgid "description" -msgstr "description" - msgctxt "Transition" msgid "description" msgstr "description" -msgctxt "Workflow" -msgid "description" -msgstr "description" - msgctxt "WorkflowTransition" msgid "description" msgstr "description" +msgctxt "State" +msgid "description" +msgstr "description" + +msgctxt "CWRType" +msgid "description" +msgstr "description" + +msgctxt "BaseTransition" +msgid "description" +msgstr "description" + msgid "description_format" msgstr "format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "format" + +msgctxt "Workflow" msgid "description_format" msgstr "format" @@ -2195,7 +2203,15 @@ msgid "description_format" msgstr "format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "format" + +msgctxt "State" msgid "description_format" msgstr "format" @@ -2203,23 +2219,7 @@ msgid "description_format" msgstr "format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "format" - -msgctxt "State" -msgid "description_format" -msgstr "format" - -msgctxt "Transition" -msgid "description_format" -msgstr "format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "format" @@ -2245,21 +2245,21 @@ msgid "destination_state" msgstr "état de destination" +msgctxt "Transition" +msgid "destination_state" +msgstr "état de destination" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "état de destination" -msgctxt "Transition" -msgid "destination_state" -msgstr "état de destination" - -msgid "destination_state_object" -msgstr "destination de" - msgctxt "State" msgid "destination_state_object" msgstr "état final de" +msgid "destination_state_object" +msgstr "destination de" + msgid "detach attached file" msgstr "détacher le fichier existant" @@ -2427,6 +2427,9 @@ msgid "external page" msgstr "page externe" +msgid "facet-loading-msg" +msgstr "en cours de traitement, merci de patienter" + msgid "facet.filters" msgstr "facettes" @@ -2526,13 +2529,13 @@ msgid "for_user" msgstr "propriété de l'utilisateur" -msgid "for_user_object" -msgstr "utilise les propriétés" - msgctxt "CWUser" msgid "for_user_object" msgstr "a pour préférence" +msgid "for_user_object" +msgstr "utilise les propriétés" + msgid "friday" msgstr "vendredi" @@ -2554,13 +2557,13 @@ msgid "from_entity" msgstr "relation de l'entité" -msgid "from_entity_object" -msgstr "relation sujet" - msgctxt "CWEType" msgid "from_entity_object" msgstr "entité de" +msgid "from_entity_object" +msgstr "relation sujet" + msgid "from_interval_start" msgstr "De" @@ -2571,13 +2574,13 @@ msgid "from_state" msgstr "état de départ" -msgid "from_state_object" -msgstr "transitions depuis cet état" - msgctxt "State" msgid "from_state_object" msgstr "état de départ de" +msgid "from_state_object" +msgstr "transitions depuis cet état" + msgid "full text or RQL query" msgstr "texte à rechercher ou requête RQL" @@ -2626,16 +2629,16 @@ "graphical representation of the %(etype)s entity type from %(appid)s data " "model" msgstr "" -"réprésentation graphique du modèle de données pour le type d'entité " -"%(etype)s de %(appid)s" +"réprésentation graphique du modèle de données pour le type d'entité %(etype)" +"s de %(appid)s" #, python-format msgid "" "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"réprésentation graphique du modèle de données pour le type de relation " -"%(rtype)s de %(appid)s" +"réprésentation graphique du modèle de données pour le type de relation %" +"(rtype)s de %(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "" @@ -2665,6 +2668,9 @@ msgid "header-right" msgstr "en-tête (droite)" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "cacher le filtre" @@ -2753,13 +2759,13 @@ msgid "in_group" msgstr "fait partie du groupe" -msgid "in_group_object" -msgstr "membres" - msgctxt "CWGroup" msgid "in_group_object" msgstr "contient les utilisateurs" +msgid "in_group_object" +msgstr "membres" + msgid "in_state" msgstr "état" @@ -2815,10 +2821,10 @@ msgid "initial_state" msgstr "état initial" +msgctxt "State" msgid "initial_state_object" msgstr "état initial de" -msgctxt "State" msgid "initial_state_object" msgstr "état initial de" @@ -3119,11 +3125,23 @@ msgid "name" msgstr "nom" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "nom" + +msgctxt "Transition" msgid "name" msgstr "nom" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "nom" + +msgctxt "Workflow" +msgid "name" +msgstr "nom" + +msgctxt "CWGroup" msgid "name" msgstr "nom" @@ -3131,11 +3149,11 @@ msgid "name" msgstr "nom" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "nom" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "nom" @@ -3147,23 +3165,11 @@ msgid "name" msgstr "nom" -msgctxt "CWSource" -msgid "name" -msgstr "nom" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "nom" -msgctxt "Transition" -msgid "name" -msgstr "nom" - -msgctxt "Workflow" -msgid "name" -msgstr "nom" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "nom" @@ -3397,13 +3403,13 @@ msgid "prefered_form" msgstr "forme préférée" -msgid "prefered_form_object" -msgstr "forme préférée à" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "forme préférée de" +msgid "prefered_form_object" +msgstr "forme préférée à" + msgid "preferences" msgstr "préférences" @@ -3420,13 +3426,13 @@ msgid "primary_email" msgstr "email principal" -msgid "primary_email_object" -msgstr "adresse email principale (object)" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "adresse principale de" +msgid "primary_email_object" +msgstr "adresse email principale (object)" + msgid "profile" msgstr "profil" @@ -3454,11 +3460,11 @@ msgid "read_permission" msgstr "permission de lire" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "permission de lire" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "permission de lire" @@ -3466,9 +3472,6 @@ msgid "read_permission" msgstr "permission de lire" -msgid "read_permission_object" -msgstr "a la permission de lire" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "peut lire" @@ -3477,6 +3480,9 @@ msgid "read_permission_object" msgstr "peut lire" +msgid "read_permission_object" +msgstr "a la permission de lire" + msgid "regexp matching host(s) to which this config applies" msgstr "" "expression régulière des noms d'hôtes auxquels cette configuration s'applique" @@ -3538,10 +3544,10 @@ msgid "relation_type" msgstr "type de relation" +msgctxt "CWRType" msgid "relation_type_object" msgstr "définition" -msgctxt "CWRType" msgid "relation_type_object" msgstr "définition" @@ -3555,10 +3561,10 @@ msgid "relations deleted" msgstr "relations supprimées" +msgctxt "CWRType" msgid "relations_object" msgstr "relations de" -msgctxt "CWRType" msgid "relations_object" msgstr "relations de" @@ -3575,11 +3581,11 @@ msgid "require_group" msgstr "restreinte au groupe" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "restreinte au groupe" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "restreinte au groupe" @@ -3587,10 +3593,10 @@ msgid "require_group" msgstr "restreinte au groupe" +msgctxt "CWGroup" msgid "require_group_object" msgstr "a les droits" -msgctxt "CWGroup" msgid "require_group_object" msgstr "a les droits" @@ -3800,10 +3806,10 @@ msgid "specializes" msgstr "spécialise" +msgctxt "CWEType" msgid "specializes_object" msgstr "parent de" -msgctxt "CWEType" msgid "specializes_object" msgstr "parent de" @@ -3846,13 +3852,13 @@ msgid "state_of" msgstr "état de" -msgid "state_of_object" -msgstr "a pour état" - msgctxt "Workflow" msgid "state_of_object" msgstr "contient les états" +msgid "state_of_object" +msgstr "a pour état" + msgid "status change" msgstr "changer l'état" @@ -3895,20 +3901,20 @@ msgid "subworkflow_exit" msgstr "sortie du sous-workflow" -msgid "subworkflow_exit_object" -msgstr "états de sortie" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "états de sortie" -msgid "subworkflow_object" -msgstr "utilisé par la transition" +msgid "subworkflow_exit_object" +msgstr "états de sortie" msgctxt "Workflow" msgid "subworkflow_object" msgstr "sous workflow de" +msgid "subworkflow_object" +msgstr "utilisé par la transition" + msgid "subworkflow_state" msgstr "état du sous-workflow" @@ -3916,10 +3922,10 @@ msgid "subworkflow_state" msgstr "état" +msgctxt "State" msgid "subworkflow_state_object" msgstr "état de sortie de" -msgctxt "State" msgid "subworkflow_state_object" msgstr "état de sortie de" @@ -4040,10 +4046,10 @@ msgid "to_entity" msgstr "pour l'entité" +msgctxt "CWEType" msgid "to_entity_object" msgstr "objet de la relation" -msgctxt "CWEType" msgid "to_entity_object" msgstr "objet de la relation" @@ -4057,13 +4063,13 @@ msgid "to_state" msgstr "état de destination" -msgid "to_state_object" -msgstr "transitions vers cet état" - msgctxt "State" msgid "to_state_object" msgstr "transition vers cet état" +msgid "to_state_object" +msgstr "transitions vers cet état" + msgid "today" msgstr "aujourd'hui" @@ -4111,10 +4117,10 @@ msgid "transition_of" msgstr "transition de" +msgctxt "Workflow" msgid "transition_of_object" msgstr "a pour transition" -msgctxt "Workflow" msgid "transition_of_object" msgstr "a pour transition" @@ -4131,10 +4137,6 @@ msgid "type" msgstr "type" -msgctxt "CWSource" -msgid "type" -msgstr "type" - msgctxt "Transition" msgid "type" msgstr "type" @@ -4143,6 +4145,10 @@ msgid "type" msgstr "type" +msgctxt "CWSource" +msgid "type" +msgstr "type" + msgid "type here a sparql query" msgstr "Tapez une requête sparql" @@ -4231,17 +4237,14 @@ msgid "update_permission" msgstr "permission de modification" +msgctxt "CWEType" +msgid "update_permission" +msgstr "permission de modifier" + msgctxt "CWAttribute" msgid "update_permission" msgstr "permission de modifier" -msgctxt "CWEType" -msgid "update_permission" -msgstr "permission de modifier" - -msgid "update_permission_object" -msgstr "a la permission de modifier" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "peut modifier" @@ -4250,6 +4253,9 @@ msgid "update_permission_object" msgstr "peut modifier" +msgid "update_permission_object" +msgstr "a la permission de modifier" + msgid "update_relation" msgstr "modifier" @@ -4293,13 +4299,13 @@ msgid "use_email" msgstr "utilise l'adresse électronique" -msgid "use_email_object" -msgstr "adresse utilisée par" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "utilisée par" +msgid "use_email_object" +msgstr "adresse utilisée par" + msgid "use_template_format" msgstr "utilisation du format 'cubicweb template'" @@ -4496,10 +4502,10 @@ msgid "workflow_of" msgstr "workflow de" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "a pour workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "a pour workflow" diff -r 0a1c405384d0 -r 108c87e0538c rset.py --- a/rset.py Fri May 06 08:48:26 2011 +0200 +++ b/rset.py Fri May 06 08:52:09 2011 +0200 @@ -475,43 +475,57 @@ entity.eid = eid # cache entity req.set_entity_cache(entity) - eschema = entity.e_schema # try to complete the entity if there are some additional columns if len(rowvalues) > 1: - rqlst = self.syntax_tree() - if rqlst.TYPE == 'select': - # UNION query, find the subquery from which this entity has been - # found - select, col = rqlst.locate_subquery(col, etype, self.args) + eschema = entity.e_schema + eid_col, attr_cols, rel_cols = self._rset_structure(eschema, col) + entity.eid = rowvalues[eid_col] + for attr, col_idx in attr_cols.items(): + entity.cw_attr_cache[attr] = rowvalues[col_idx] + for (rtype, role), col_idx in rel_cols.items(): + value = rowvalues[col_idx] + if value is None: + if role == 'subject': + rql = 'Any Y WHERE X %s Y, X eid %s' + else: + rql = 'Any Y WHERE Y %s X, X eid %s' + rrset = ResultSet([], rql % (rtype, entity.eid)) + rrset.req = req + else: + rrset = self._build_entity(row, col_idx).as_rset() + entity.cw_set_relation_cache(rtype, role, rrset) + return entity + + @cached + def _rset_structure(self, eschema, entity_col): + eid_col = col = entity_col + rqlst = self.syntax_tree() + attr_cols = {} + rel_cols = {} + if rqlst.TYPE == 'select': + # UNION query, find the subquery from which this entity has been + # found + select, col = rqlst.locate_subquery(entity_col, eschema.type, self.args) + else: + select = rqlst + # take care, due to outer join support, we may find None + # values for non final relation + for i, attr, role in attr_desc_iterator(select, col, entity_col): + if role == 'subject': + rschema = eschema.subjrels[attr] else: - select = rqlst - # take care, due to outer join support, we may find None - # values for non final relation - for i, attr, role in attr_desc_iterator(select, col, entity.cw_col): - if role == 'subject': - rschema = eschema.subjrels[attr] - if rschema.final: - if attr == 'eid': - entity.eid = rowvalues[i] - else: - entity.cw_attr_cache[attr] = rowvalues[i] - continue + rschema = eschema.objrels[attr] + if rschema.final: + if attr == 'eid': + eid_col = i else: - rschema = eschema.objrels[attr] + attr_cols[attr] = i + else: rdef = eschema.rdef(attr, role) # only keep value if it can't be multivalued if rdef.role_cardinality(role) in '1?': - if rowvalues[i] is None: - if role == 'subject': - rql = 'Any Y WHERE X %s Y, X eid %s' - else: - rql = 'Any Y WHERE Y %s X, X eid %s' - rrset = ResultSet([], rql % (attr, entity.eid)) - rrset.req = req - else: - rrset = self._build_entity(row, i).as_rset() - entity.cw_set_relation_cache(attr, role, rrset) - return entity + rel_cols[(attr, role)] = i + return eid_col, attr_cols, rel_cols @cached def syntax_tree(self): diff -r 0a1c405384d0 -r 108c87e0538c server/serverconfig.py --- a/server/serverconfig.py Fri May 06 08:48:26 2011 +0200 +++ b/server/serverconfig.py Fri May 06 08:52:09 2011 +0200 @@ -255,7 +255,7 @@ # configuration file (#16102) @cached def read_sources_file(self): - return read_config(self.sources_file()) + return read_config(self.sources_file(), raise_if_unreadable=True) def sources(self): """return a dictionnaries containing sources definitions indexed by diff -r 0a1c405384d0 -r 108c87e0538c server/sources/pyrorql.py --- a/server/sources/pyrorql.py Fri May 06 08:48:26 2011 +0200 +++ b/server/sources/pyrorql.py Fri May 06 08:52:09 2011 +0200 @@ -437,7 +437,7 @@ cu = session.pool[self.uri] cu.execute('SET %s WHERE X eid %%(x)s' % ','.join(relations), kwargs) self._query_cache.clear() - entity.clear_all_caches() + entity.cw_clear_all_caches() def delete_entity(self, session, entity): """delete an entity from the source""" @@ -453,8 +453,8 @@ {'x': self.eid2extid(subject, session), 'y': self.eid2extid(object, session)}) self._query_cache.clear() - session.entity_from_eid(subject).clear_all_caches() - session.entity_from_eid(object).clear_all_caches() + session.entity_from_eid(subject).cw_clear_all_caches() + session.entity_from_eid(object).cw_clear_all_caches() def delete_relation(self, session, subject, rtype, object): """delete a relation from the source""" @@ -463,8 +463,8 @@ {'x': self.eid2extid(subject, session), 'y': self.eid2extid(object, session)}) self._query_cache.clear() - session.entity_from_eid(subject).clear_all_caches() - session.entity_from_eid(object).clear_all_caches() + session.entity_from_eid(subject).cw_clear_all_caches() + session.entity_from_eid(object).cw_clear_all_caches() class RQL2RQL(object): diff -r 0a1c405384d0 -r 108c87e0538c server/sources/rql2sql.py --- a/server/sources/rql2sql.py Fri May 06 08:48:26 2011 +0200 +++ b/server/sources/rql2sql.py Fri May 06 08:52:09 2011 +0200 @@ -1357,6 +1357,8 @@ operator = ' LIKE ' else: operator = ' %s ' % operator + elif operator == 'REGEXP': + return ' %s' % self.dbhelper.sql_regexp_match_expression(rhs.accept(self)) elif (operator == '=' and isinstance(rhs, Constant) and rhs.eval(self._args) is None): if lhs is None: @@ -1407,6 +1409,8 @@ if constant.type is None: return 'NULL' value = constant.value + if constant.type == 'etype': + return value if constant.type == 'Int' and isinstance(constant.parent, SortTerm): return value if constant.type in ('Date', 'Datetime'): diff -r 0a1c405384d0 -r 108c87e0538c server/test/unittest_ldapuser.py --- a/server/test/unittest_ldapuser.py Fri May 06 08:48:26 2011 +0200 +++ b/server/test/unittest_ldapuser.py Fri May 06 08:52:09 2011 +0200 @@ -239,7 +239,7 @@ iworkflowable.fire_transition('deactivate') try: cnx.commit() - adim.clear_all_caches() + adim.cw_clear_all_caches() self.assertEqual(adim.in_state[0].name, 'deactivated') trinfo = iworkflowable.latest_trinfo() self.assertEqual(trinfo.owned_by[0].login, SYT) diff -r 0a1c405384d0 -r 108c87e0538c server/test/unittest_querier.py --- a/server/test/unittest_querier.py Fri May 06 08:48:26 2011 +0200 +++ b/server/test/unittest_querier.py Fri May 06 08:52:09 2011 +0200 @@ -443,6 +443,15 @@ self.assertEqual(rset.rows[0][0], result) self.assertEqual(rset.description, [('Int',)]) + def test_regexp_based_pattern_matching(self): + peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0] + peid2 = self.execute("INSERT Personne X: X nom 'cidule'")[0][0] + rset = self.execute('Any X WHERE X is Personne, X nom REGEXP "^b"') + self.assertEqual(len(rset.rows), 1, rset.rows) + self.assertEqual(rset.rows[0][0], peid1) + rset = self.execute('Any X WHERE X is Personne, X nom REGEXP "idu"') + self.assertEqual(len(rset.rows), 2, rset.rows) + def test_select_aggregat_count(self): rset = self.execute('Any COUNT(X)') self.assertEqual(len(rset.rows), 1) diff -r 0a1c405384d0 -r 108c87e0538c server/test/unittest_rql2sql.py --- a/server/test/unittest_rql2sql.py Fri May 06 08:48:26 2011 +0200 +++ b/server/test/unittest_rql2sql.py Fri May 06 08:52:09 2011 +0200 @@ -1331,6 +1331,18 @@ '''SELECT SUBSTR(_P.cw_nom, 1, 1) FROM cw_Personne AS _P''') + def test_cast(self): + self._check("Any CAST(String, P) WHERE P is Personne", + '''SELECT CAST(_P.cw_eid AS text) +FROM cw_Personne AS _P''') + + def test_regexp(self): + self._check("Any X WHERE X login REGEXP '[0-9].*'", + '''SELECT _X.cw_eid +FROM cw_CWUser AS _X +WHERE _X.cw_login ~ [0-9].* +''') + def test_parser_parse(self): for t in self._parse(PARSER): yield t @@ -1630,6 +1642,9 @@ for t in self._parse(HAS_TEXT_LG_INDEXER): yield t + def test_regexp(self): + self.skipTest('regexp-based pattern matching not implemented in sqlserver') + def test_or_having_fake_terms(self): self._check('Any X WHERE X is CWUser, X creation_date D HAVING YEAR(D) = "2010" OR D = NULL', '''SELECT _X.cw_eid @@ -1726,6 +1741,10 @@ for t in self._parse(WITH_LIMIT):# + ADVANCED_WITH_LIMIT_OR_ORDERBY): yield t + def test_cast(self): + self._check("Any CAST(String, P) WHERE P is Personne", + '''SELECT CAST(_P.cw_eid AS nvarchar(max)) +FROM cw_Personne AS _P''') class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC): @@ -1739,6 +1758,14 @@ '''SELECT MONTH(_P.cw_creation_date) FROM cw_Personne AS _P''') + def test_regexp(self): + self._check("Any X WHERE X login REGEXP '[0-9].*'", + '''SELECT _X.cw_eid +FROM cw_CWUser AS _X +WHERE _X.cw_login REGEXP [0-9].* +''') + + def test_union(self): for t in self._parse(( ('(Any N ORDERBY 1 WHERE X name N, X is State)' @@ -1879,6 +1906,18 @@ '''SELECT EXTRACT(MONTH from _P.cw_creation_date) FROM cw_Personne AS _P''') + def test_cast(self): + self._check("Any CAST(String, P) WHERE P is Personne", + '''SELECT CAST(_P.cw_eid AS mediumtext) +FROM cw_Personne AS _P''') + + def test_regexp(self): + self._check("Any X WHERE X login REGEXP '[0-9].*'", + '''SELECT _X.cw_eid +FROM cw_CWUser AS _X +WHERE _X.cw_login REGEXP [0-9].* +''') + def test_from_clause_needed(self): queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')", '''SELECT 1 diff -r 0a1c405384d0 -r 108c87e0538c server/test/unittest_undo.py --- a/server/test/unittest_undo.py Fri May 06 08:48:26 2011 +0200 +++ b/server/test/unittest_undo.py Fri May 06 08:52:09 2011 +0200 @@ -150,8 +150,8 @@ txuuid = self.commit() actions = self.cnx.transaction_info(txuuid).actions_list() self.assertEqual(len(actions), 1) - toto.clear_all_caches() - e.clear_all_caches() + toto.cw_clear_all_caches() + e.cw_clear_all_caches() errors = self.cnx.undo_transaction(txuuid) undotxuuid = self.commit() self.assertEqual(undotxuuid, None) # undo not undoable @@ -192,7 +192,7 @@ self.commit() errors = self.cnx.undo_transaction(txuuid) self.commit() - p.clear_all_caches() + p.cw_clear_all_caches() self.assertEqual(p.fiche[0].eid, c2.eid) self.assertEqual(len(errors), 1) self.assertEqual(errors[0], diff -r 0a1c405384d0 -r 108c87e0538c test/unittest_entity.py --- a/test/unittest_entity.py Fri May 06 08:48:26 2011 +0200 +++ b/test/unittest_entity.py Fri May 06 08:52:09 2011 +0200 @@ -539,7 +539,7 @@ self.assertEqual(person.rest_path(), 'personne/doe') # ambiguity test person2 = req.create_entity('Personne', prenom=u'remi', nom=u'doe') - person.clear_all_caches() + person.cw_clear_all_caches() self.assertEqual(person.rest_path(), 'personne/eid/%s' % person.eid) self.assertEqual(person2.rest_path(), 'personne/eid/%s' % person2.eid) # unique attr with None value (wikiid in this case) diff -r 0a1c405384d0 -r 108c87e0538c test/unittest_selectors.py --- a/test/unittest_selectors.py Fri May 06 08:48:26 2011 +0200 +++ b/test/unittest_selectors.py Fri May 06 08:52:09 2011 +0200 @@ -193,7 +193,7 @@ class WorkflowSelectorTC(CubicWebTC): def _commit(self): self.commit() - self.wf_entity.clear_all_caches() + self.wf_entity.cw_clear_all_caches() def setup_database(self): wf = self.shell().add_workflow("wf_test", 'StateFull', default=True) diff -r 0a1c405384d0 -r 108c87e0538c test/unittest_utils.py --- a/test/unittest_utils.py Fri May 06 08:48:26 2011 +0200 +++ b/test/unittest_utils.py Fri May 06 08:52:09 2011 +0200 @@ -22,8 +22,8 @@ import datetime from logilab.common.testlib import TestCase, unittest_main - -from cubicweb.utils import make_uid, UStringIO, SizeConstrainedList, RepeatList +from cubicweb.devtools.testlib import CubicWebTC +from cubicweb.utils import make_uid, UStringIO, SizeConstrainedList, RepeatList, HTMLHead from cubicweb.entity import Entity try: @@ -155,6 +155,102 @@ def test_encoding_unknown_stuff(self): self.assertEqual(self.encode(TestCase), 'null') +class HTMLHeadTC(CubicWebTC): + def test_concat_urls(self): + base_url = u'http://test.fr/data/' + head = HTMLHead(base_url) + urls = [base_url + u'bob1.js', + base_url + u'bob2.js', + base_url + u'bob3.js'] + result = head.concat_urls(urls) + expected = u'http://test.fr/data/??bob1.js,bob2.js,bob3.js' + self.assertEqual(result, expected) + + def test_group_urls(self): + base_url = u'http://test.fr/data/' + head = HTMLHead(base_url) + urls_spec = [(base_url + u'bob0.js', None), + (base_url + u'bob1.js', None), + (u'http://ext.com/bob2.js', None), + (u'http://ext.com/bob3.js', None), + (base_url + u'bob4.css', 'all'), + (base_url + u'bob5.css', 'all'), + (base_url + u'bob6.css', 'print'), + (base_url + u'bob7.css', 'print'), + (base_url + u'bob8.css', ('all', u'[if IE 8]')), + (base_url + u'bob9.css', ('print', u'[if IE 8]')) + ] + result = head.group_urls(urls_spec) + expected = [(base_url + u'??bob0.js,bob1.js', None), + (u'http://ext.com/bob2.js', None), + (u'http://ext.com/bob3.js', None), + (base_url + u'??bob4.css,bob5.css', 'all'), + (base_url + u'??bob6.css,bob7.css', 'print'), + (base_url + u'bob8.css', ('all', u'[if IE 8]')), + (base_url + u'bob9.css', ('print', u'[if IE 8]')) + ] + self.assertEqual(list(result), expected) + + def test_getvalue_with_concat(self): + base_url = u'http://test.fr/data/' + head = HTMLHead(base_url) + head.add_js(base_url + u'bob0.js') + head.add_js(base_url + u'bob1.js') + head.add_js(u'http://ext.com/bob2.js') + head.add_js(u'http://ext.com/bob3.js') + head.add_css(base_url + u'bob4.css') + head.add_css(base_url + u'bob5.css') + head.add_css(base_url + u'bob6.css', 'print') + head.add_css(base_url + u'bob7.css', 'print') + head.add_ie_css(base_url + u'bob8.css') + head.add_ie_css(base_url + u'bob9.css', 'print', u'[if lt IE 7]') + result = head.getvalue() + expected = u""" + + + + + + + +""" + self.assertEqual(result, expected) + + def test_getvalue_without_concat(self): + base_url = u'http://test.fr/data/' + head = HTMLHead() + head.add_js(base_url + u'bob0.js') + head.add_js(base_url + u'bob1.js') + head.add_js(u'http://ext.com/bob2.js') + head.add_js(u'http://ext.com/bob3.js') + head.add_css(base_url + u'bob4.css') + head.add_css(base_url + u'bob5.css') + head.add_css(base_url + u'bob6.css', 'print') + head.add_css(base_url + u'bob7.css', 'print') + head.add_ie_css(base_url + u'bob8.css') + head.add_ie_css(base_url + u'bob9.css', 'print', u'[if lt IE 7]') + result = head.getvalue() + expected = u""" + + + + + + + + + + +""" + self.assertEqual(result, expected) if __name__ == '__main__': unittest_main() diff -r 0a1c405384d0 -r 108c87e0538c toolsutils.py --- a/toolsutils.py Fri May 06 08:48:26 2011 +0200 +++ b/toolsutils.py Fri May 06 08:52:09 2011 +0200 @@ -159,15 +159,11 @@ print '-> set permissions to 0600 for %s' % filepath chmod(filepath, 0600) -def read_config(config_file): - """read the instance configuration from a file and return it as a - dictionnary - - :type config_file: str - :param config_file: path to the configuration file - - :rtype: dict - :return: a dictionary with specified values associated to option names +def read_config(config_file, raise_if_unreadable=False): + """read some simple configuration from `config_file` and return it as a + dictionary. If `raise_if_unreadable` is false (the default), an empty + dictionary will be returned if the file is inexistant or unreadable, else + :exc:`ExecutionError` will be raised. """ from logilab.common.fileutils import lines config = current = {} @@ -190,8 +186,12 @@ value = value.strip() current[option] = value or None except IOError, ex: - warning('missing or non readable configuration file %s (%s)', - config_file, ex) + if raise_if_unreadable: + raise ExecutionError('%s. Are you logged with the correct user ' + 'to use this instance?' % ex) + else: + warning('missing or non readable configuration file %s (%s)', + config_file, ex) return config diff -r 0a1c405384d0 -r 108c87e0538c utils.py --- a/utils.py Fri May 06 08:48:26 2011 +0200 +++ b/utils.py Fri May 06 08:52:09 2011 +0200 @@ -240,7 +240,7 @@ xhtml_safe_script_opening = u'' - def __init__(self): + def __init__(self, datadir_url=None): super(HTMLHead, self).__init__() self.jsvars = [] self.jsfiles = [] @@ -248,6 +248,7 @@ self.ie_cssfiles = [] self.post_inlined_scripts = [] self.pagedata_unload = False + self.datadir_url = datadir_url def add_raw(self, rawheader): @@ -284,7 +285,7 @@ if jsfile not in self.jsfiles: self.jsfiles.append(jsfile) - def add_css(self, cssfile, media): + def add_css(self, cssfile, media='all'): """adds `cssfile` to the list of javascripts used in the webpage This function checks if the file has already been added @@ -304,6 +305,45 @@ self.post_inlined_scripts.append(self.js_unload_code) self.pagedata_unload = True + def concat_urls(self, urls): + """concatenates urls into one url usable by Apache mod_concat + + This method returns the url without modifying it if there is only + one element in the list + :param urls: list of local urls/filenames to concatenate + """ + if len(urls) == 1: + return urls[0] + len_prefix = len(self.datadir_url) + concated = u','.join(url[len_prefix:] for url in urls) + return (u'%s??%s' % (self.datadir_url, concated)) + + def group_urls(self, urls_spec): + """parses urls_spec in order to generate concatenated urls + for js and css includes + + This method checks if the file is local and if it shares options + with direct neighbors + :param urls_spec: entire list of urls/filenames to inspect + """ + concatable = [] + prev_islocal = False + prev_key = None + for url, key in urls_spec: + islocal = url.startswith(self.datadir_url) + if concatable and (islocal != prev_islocal or key != prev_key): + yield (self.concat_urls(concatable), prev_key) + del concatable[:] + if not islocal: + yield (url, key) + else: + concatable.append(url) + prev_islocal = islocal + prev_key = key + if concatable: + yield (self.concat_urls(concatable), prev_key) + + def getvalue(self, skiphead=False): """reimplement getvalue to provide a consistent (and somewhat browser optimzed cf. http://stevesouders.com/cuzillion) order in external @@ -321,18 +361,20 @@ w(vardecl + u'\n') w(self.xhtml_safe_script_closing) # 2/ css files - for cssfile, media in self.cssfiles: + for cssfile, media in (self.group_urls(self.cssfiles) if self.datadir_url else self.cssfiles): w(u'\n' % (media, xml_escape(cssfile))) # 3/ ie css if necessary if self.ie_cssfiles: - for cssfile, media, iespec in self.ie_cssfiles: + ie_cssfiles = ((x, (y, z)) for x, y, z in self.ie_cssfiles) + for cssfile, (media, iespec) in (self.group_urls(ie_cssfiles) if self.datadir_url else ie_cssfiles): w(u' \n') # 4/ js files - for jsfile in self.jsfiles: + jsfiles = ((x, None) for x in self.jsfiles) + for jsfile, media in self.group_urls(jsfiles) if self.datadir_url else jsfiles: w(u'\n' % xml_escape(jsfile)) # 5/ post inlined scripts (i.e. scripts depending on other JS files) diff -r 0a1c405384d0 -r 108c87e0538c vregistry.py --- a/vregistry.py Fri May 06 08:48:26 2011 +0200 +++ b/vregistry.py Fri May 06 08:52:09 2011 +0200 @@ -184,7 +184,10 @@ raise :exc:`NoSelectableObject` if not object apply """ - return self._select_best(self[__oid], *args, **kwargs) + obj = self._select_best(self[__oid], *args, **kwargs) + if obj is None: + raise NoSelectableObject(args, kwargs, self[__oid] ) + return obj def select_or_none(self, __oid, *args, **kwargs): """return the most specific object among those with the given oid @@ -202,16 +205,18 @@ context """ for appobjects in self.itervalues(): - try: - yield self._select_best(appobjects, *args, **kwargs) - except NoSelectableObject: + obj = self._select_best(appobjects, *args, **kwargs) + if obj is None: continue + yield obj def _select_best(self, appobjects, *args, **kwargs): """return an instance of the most specific object according to parameters - raise `NoSelectableObject` if not object apply + return None if not object apply (don't raise `NoSelectableObject` since + it's costly when searching appobjects using `possible_objects` + (e.g. searching for hooks). """ if len(args) > 1: warn('[3.5] only the request param can not be named when calling select*', @@ -224,7 +229,7 @@ elif appobjectscore > 0 and appobjectscore == score: winners.append(appobject) if winners is None: - raise NoSelectableObject(args, kwargs, appobjects) + return None if len(winners) > 1: # log in production environement / test, error while debugging msg = 'select ambiguity: %s\n(args: %s, kwargs: %s)' diff -r 0a1c405384d0 -r 108c87e0538c web/controller.py --- a/web/controller.py Fri May 06 08:48:26 2011 +0200 +++ b/web/controller.py Fri May 06 08:52:09 2011 +0200 @@ -165,7 +165,7 @@ elif self._edited_entity: # clear caches in case some attribute participating to the rest path # has been modified - self._edited_entity.clear_all_caches() + self._edited_entity.cw_clear_all_caches() path = self._edited_entity.rest_path() else: path = 'view' diff -r 0a1c405384d0 -r 108c87e0538c web/data/cubicweb.ajax.js --- a/web/data/cubicweb.ajax.js Fri May 06 08:48:26 2011 +0200 +++ b/web/data/cubicweb.ajax.js Fri May 06 08:52:09 2011 +0200 @@ -86,6 +86,41 @@ var JSON_BASE_URL = baseuri() + 'json?'; +/** + * returns true if `url` is a mod_concat-like url + * (e.g. http://..../data??resource1.js,resource2.js) + */ +function _modconcatLikeUrl(url) { + var base = baseuri(); + if (!base.endswith('/')) { + base += '/'; + } + var modconcat_rgx = new RegExp('(' + base + 'data/([a-z0-9]+/)?)\\?\\?(.+)'); + return modconcat_rgx.exec(url); +} + +/** + * decomposes a mod_concat-like url into its corresponding list of + * resources' urls + * + * >>> _listResources('http://foo.com/data/??a.js,b.js,c.js') + * ['http://foo.com/data/a.js', 'http://foo.com/data/b.js', 'http://foo.com/data/c.js'] + */ +function _listResources(src) { + var resources = []; + var groups = _modconcatLikeUrl(src); + if (groups == null) { + resources.push(src); + } else { + var dataurl = groups[1]; + $.each(cw.utils.lastOf(groups).split(','), + function() { + resources.push(dataurl + this); + }); + } + return resources; +} + //============= utility function handling remote calls responses. ==============// function _loadAjaxHtmlHead($node, $head, tag, srcattr) { var jqtagfilter = tag + '[' + srcattr + ']'; @@ -93,29 +128,32 @@ cw['loaded_'+srcattr] = []; var loaded = cw['loaded_'+srcattr]; jQuery('head ' + jqtagfilter).each(function(i) { - loaded.push(this.getAttribute(srcattr)); - }); + // tab1.push.apply(tab1, tab2) <=> tab1 += tab2 (python-wise) + loaded.push.apply(loaded, _listResources(this.getAttribute(srcattr))); + }); } else { var loaded = cw['loaded_'+srcattr]; } $node.find(tag).each(function(i) { - var url = this.getAttribute(srcattr); + var srcnode = this; + var url = srcnode.getAttribute(srcattr); if (url) { - if (jQuery.inArray(url, loaded) == -1) { - // take care to