gnome-activity-journal-0.8.0/0000755000175000017500000000000011610346154015451 5ustar rainctrainctgnome-activity-journal-0.8.0/NEWS0000644000175000017500000001026211610343651016150 0ustar rainctrainct2011-7-16: GNOME Activity Journal 0.8.0 "Sword" ----------------------------------------------- - Added an incognito mode option to the tray icon. - Removed blacklist plugin, replaced by Activity Log Manager. - Added different zoom levels to ThumbView and TimelineView. - Added an erase mode to easily delete many events. - Improved handling of the extension not being available (LP: #790834). - Added support for file annotation meta-data (LP: #715910). - Don't show application launch events nor fake events generated by Activity Log Manager. - Fixed blacklist template deletion (LP: #643795). - Several other minor tweaks (better netbook screen support, etc). 2011-1-26: GNOME Activity Journal 0.6.0 "Pink Unicorns don't exist" ------------------------------------------------------------------- * General New features - Added drag and drop support to the three views (LP: #553385). - Added drag and drop support to the bookmark/pin area (LP: #365048). - Improved items preview adding information tooltip. (LP: #561863). - Added tooltip for peeking quickly into categories. - Added preview for Audio items. - Added appindicator/Tray icon support. - Added support for Xchat. - Added support for Bazaar version control system. * Eye candy tweaks - Added "welcome screen" showed when the Activity Journal starts and loads the items. - Go to Today button always highlighted. - Path's label clickable in MoreInformation window (LP: #532303). - Usability tweaks to the views toolbar. - Item's categories becomes coloured when containing a searched item. * Bug fixes - Fixed bookmark/pinning feature (LP: #680653). - Fixed support for RECEIVE_EVENT (LP: #667870). - Fixed day's part timerange (LP: #655045). - Fixed crash caused by gstreamer (LP: #705545). - Fixed problem with dialog windows (LP: #706543). - Fixed title of MoreInformation window(LP: #706544). - Fixed video previews problem. - Fixed visualization bug in TimeLineView. - Fixed internationalization and localization problems. * Misc - Added support for DELETE_EVENT (fx. deleted Tomboy's notes aren't showed). - Cleaned up code (fixed some gtk and gio warnings, remove unused code). - Added new translations (ast, it, el, eo, et, eu, ko, sl, zh_TW). 2010-09-18: GNOME Activity Journal 0.5.0.1 "Bazaar" --------------------------------------------------- This is a bug-fix release for GNOME Activity Journal 0.5.0. - Updated Hamster-specific code to use the new ontology from Zeitgeist 0.5.0 (LP: #641148, Debian bug #591267). - Catch exception trying to extract a non-existant thumbnail from an OpenDocument file (LP: #535440). - Fixed a possible issue with "%20" being used in filenames. - Some minor changes (relabeled "Goto Today" to "Go to Today", added missing tooltips to toolbar icons). - Removed superfluous debugging (timing) information. - Updated several translations. - Removed Zeitgeist version check for Zeitgeist 0.5.0 compatibility (as it reports a wrong version number). 2010-08-24: GNOME Activity Journal 0.5.0 "Defying Gravity" ---------------------------------------------------------- - Reduced startup time and improved responsivity. - Improved support for Tomboy notes and for websites. - Added an (experimental) toolbar providing easier access to several options. - Improved the search tool. - Added a preferences dialog providing access to a Blacklist management extension. 2010-05-02: GNOME Activity Journal 0.3.4.1 ------------------------------------------ This release avoids an error when using Python 2.5 due to its lack of new-style string formatting. 2010-05-01: GNOME Activity Journal 0.3.4 ---------------------------------------- - Changed the timeline view to be based upon GtkTreeView and also revamped the multiple day view. - Improved the rendering of the thumbnail view. - Improved support for dark themes, and fixed widget drawing when a theme with pixbuf backgrounds is in use. - Added a "More information" dialogue for events, showing information about them and pointing to related subjects. - The contextual menu is now available in all widgets. - Added a content object system which allows users to launch, view, and manipulate events with non-file subjects. ... gnome-activity-journal-0.8.0/fungtk/0000755000175000017500000000000011610346154016747 5ustar rainctrainctgnome-activity-journal-0.8.0/fungtk/quickconf.py0000644000175000017500000002447111330612741021310 0ustar rainctrainct# -*- coding: utf-8 -*- # # QuickConf - Use GConf, quickly! # # Copyright © 2010 Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import gconf import functools class BadSchemaFileError(Exception): pass class QuickConf: """ Abstraction layer around gconf.Client, providing several features: * Dictionary-like access to keys and transparent handling of their type. * Automatic prefixation of key names with their root path. * Support for specifying a default value in case a key is unset. * Support for asserting that the types of given values are correct, reading them from a .schemas file. """ _root = None _schema = None _schema_strict = False _schema_strict_read = False _typemap = { int: 'int', str: 'string', bool: 'bool', float: 'float', list: 'list', tuple: 'list', } _typemap_inv = dict(zip(_typemap.values(), _typemap.keys())) def __init__(self, root=None, preload=None, gconf_client=None): self._gconf = gconf.Client() or gconf_client self._preload = preload or gconf.CLIENT_PRELOAD_RECURSIVE if root: self.set_root(root) # We give read-only access to the GConf Client instance in case users # need to access additional functionality. @property def gconf(self): """ The `gconf.Client' instance internally used by QuickConf. """ return self._gconf def _parse_schema_file(self, schema_file): """ Parse the given .schema or .schema.in file. Return True if successful or false if the file can't be accessed. In case the file can't be parsed correctly, raise BadSchemaFileError. """ from xml.dom.minidom import parse as parse_xml from xml.parsers.expat import ExpatError try: content = parse_xml(schema_file) except IOError: return False except ExpatError, e: raise BadSchemaFileError, e.message self._schema = {} try: for entry in content.getElementsByTagName('schema'): key = entry.getElementsByTagName('applyto')[0].childNodes[0].data if key in self._schema: raise BadSchemaFileError, 'duplicate key: %s' % key type = entry.getElementsByTagName('type')[0].childNodes[0].data default = entry.getElementsByTagName('default') if default: default = self._typemap_inv[type](default[0].childNodes[0].data) self._schema[key] = (type, default if default else None) except IndexError: raise BadSchemaFileError, \ 'missing "key" or "type" entry in node' return True def set_schema(self, *schema_files, **kwargs): """ set_schema(schema_files...) -> None Parse the given .schema or .schema.in file and extract key names, types and default values from it. Type information will be used to perform conversions and ensure all keys get the right type. Default values will be returned when accessing an unset key, unless another default value is explicitly provided when accessing the key. The type checking can avoid problems with code such as the following: >>> conf['value'] = raw_input('Introduce a number:') Where "value" would get a string assigned instead of a number. Of course, the following code would be preferable: >>> conf['value'] = int(raw_input('Introduce a number:')) However, for convenience, QuickConf offers the possibility to handle this transparently when the required schemas are available. For further convenience, you can call this method passing several schema files as arguments. If this is done, set_schema will use the first of them which exists and is readable. In case none of them can be read, IOError will be raised, or in case a corrupt one is found, BadSchemaFileError. Additionally, if set_schema is called with the parameter "strict=True", trying to set a key not defined in the schema will raise a KeyError exception. If "strict_read=True" is used, the same will happen when trying to read a key not defined in the schema. """ if 'strict_read' in kwargs and kwargs['strict_read']: self._schema_strict = self._schema_strict_read = True elif 'strict' in kwargs and kwargs['strict']: self._schema_strict = True # Parse the first existing file of those provided for filename in schema_files: if self._parse_schema_file(filename): return raise IOError, 'None of the provided .schema files could be read.' def set_root(self, root): """ set_root(root) -> str Change the root path. Key names given to all other methods will be automatically prefixed with this path. """ if self._root: self._gconf.remove_dir(self._root) self._root = root.rstrip('/') self._gconf.add_dir(self._root, self._preload) def get_root(self): """ get_root() -> str Return the root path with which key names given in all other methods will be automatically prefixed. """ return self._root def __getitem__(self, key): return self.get(key) def __setitem__(self, key, value): return self.set(key, value) def get_complete_path(self, key): """ get_complete_path(key) -> str Return the complete GConf key name, after prefixing the given `key' with the root path specified when calling `__init__()' or using `set_root()'. """ return (self._root + '/' + key) if self._root else key # decorator def _normalize_key(method): @functools.wraps(method) def decorated(self, key, *args, **kwargs): return method(self, self.get_complete_path(key), *args, **kwargs) return decorated def _get_value(self, gconfvalue): value = getattr(gconfvalue, 'get_' + gconfvalue.type.value_nick)() if self._typemap[type(value)] == 'list': return [self._get_value(el) for el in value] return value @_normalize_key def get(self, key, default=None): """ get(key, [default]) -> bool/str/int/float/list Return the value of the given key or, if the key is unset, the value given as `default'. In case you have specified a .schemas file with `set_schema()', QuickConf will try to look for a default value there if need. """ gconfvalue = self._gconf.get(key) if not gconfvalue: if not default and self._schema: if key in self._schema: return self._schema[key][1] elif self._schema_strict_read: raise KeyError, \ 'Reading key not defined in schema: %s' % key return default return self._get_value(gconfvalue) @_normalize_key def set(self, key, value): """ set(key, value) -> None Assign the given value to the given key. """ keytype = None if self._schema: if key in self._schema: keytype = self._schema[key][0] safe_value = self._typemap_inv[keytype](value) elif self._schema_strict: raise KeyError, 'Writing key not defined in schema: %s' % key if not keytype: keytype = self._typemap[type(value)] safe_value = value setter = getattr(self._gconf, 'set_' + keytype) if keytype == 'list': # TODO: How is this represented in .schemas? elemtype = self._typemap[type(value[0])].upper() setter(key, getattr(gconf, 'VALUE_' + elemtype), safe_value) else: setter(key, safe_value) @_normalize_key def connect(self, key, callback, *user_data): """ connect(key, callback, [user_data...]) -> None Connect the given callback to change events of the given key. The callback method will receive the changed key and its value as parameters. If you need something else you can set it as user_data and you'll receive it aswell. """ def cb(gconfclient, id, gconfentry, *user_data2): key = gconfentry.get_key()[len(self._root)+1:] value = self._get_value(gconfentry.get_value()) if \ gconfentry.get_value() else None if user_data: callback(key, value, *user_data2) else: # Do not pass in user_data2, as GConf puts an useless # empty tuple there when there shouldn't be anything. callback(key, value) self._gconf.notify_add(key, cb, *user_data) @_normalize_key def remove_key(self, key): """ remove_key(key) -> None Unset a GConf key. """ self._gconf.unset(key) @_normalize_key def remove_path(self, path): """ remove_path(path) -> None Unset all GConf keys found in the given path. """ self._gconf.recursive_unset(path.rstrip('/'), gconf.UNSET_INCLUDING_SCHEMA_NAMES) gnome-activity-journal-0.8.0/fungtk/__init__.py0000644000175000017500000000000011330612741021043 0ustar rainctrainctgnome-activity-journal-0.8.0/fungtk/README.FunGTK0000644000175000017500000000062411330612741020723 0ustar rainctrainctFile quickconf.py here has been taken from FunGTK's repository, to avoid having to pull it separately as a dependency. Any changes done to it should NOT be done here but directly submitted to the FunGTK project (https://launchpad.net/fungtk). The latests version of it, including unit tests to ensure it's working correctly, and any new additions to FunGTK, can be downloaded doing: bzr get lp:fungtk gnome-activity-journal-0.8.0/README0000644000175000017500000000206511610346132016330 0ustar rainctrainctGNOME Activity Journal Dependencies ------------------------------ You'll need to have Zeitgeist (version 0.8.0 or later) installed. To get it, run inside the same directory where you have checked out the "gnome-activity-journal" branch: $ bzr get lp:zeitgeist And then start Zeitgeist in a separate terminal window, running: $ ./zeitgeist/zeitgeist-daemon.py Once Zeitgeist is running, you can start the GNOME Activity Journal like this: $ ./gnome-activity-journal/gnome-activity-journal License ------------------------------ Code: GNU General Public License, version 3 or later See COPYING Art: Creative Commons Attribution Share-Alike License See http://creativecommons.org/licenses/by-sa/3.0/ Copyright ------------------------------ See AUTHORS and the source file's headers for the copyright holder's names. Additionally, some images use textures or other resources from 3th parties not directly involved with the project. Those are: gnome-activity-journal.svg: - Luigi Chiesa, 2007 http://commons.wikimedia.org/wiki/File:Jute_nahtlos.png gnome-activity-journal-0.8.0/gnome-activity-journal0000755000175000017500000000737211610346142022014 0ustar rainctrainct#! /usr/bin/env python # -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009 Seif Lotfy # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Peter Lund # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os import sys import gtk import gettext import optparse # Where this file lives our_dir = os.path.abspath(os.path.dirname(__file__)) # If GNOME Activity Journal is installed system-wide, as indicated by # this file residing in $prefix/bin, we expect to find the remaining code # in $prefix/share/gnome-activity-journal/. if os.path.basename(our_dir) == 'bin': sys.path.insert(0, os.path.join(os.path.dirname(our_dir), 'share/gnome-activity-journal')) # Check for critical modules from other repositories. # Support side-by-side or nested repositories during development. # # If zeitgeist is installed locally (with --prefix=/.local) then Python # should have added ~/.local/lib/python/site-packages to the search path # automatically. If it hasn't, then take a closer look at site.USER_SITE, # site.USER_BASE, and site.ENABLE_USER_SITE. try: # repo/module names other_repos = ['zeitgeist'] # paths of potential repos next to us and below us repo_paths = ([os.path.join(our_dir, '..', repo) for repo in other_repos] + [os.path.join(our_dir, '.' , repo) for repo in other_repos]) # look for (and import) the needed modules from imp import load_module, find_module for module in other_repos: m = find_module(module, repo_paths + sys.path) if "--debug" in sys.argv: # OptParse isn't instantiated yet, here! print "Using the \"%s\" module from %s" % (module, os.path.abspath(m[1])) load_module(module, *m) except ImportError, e: print "-" * 60 print "ERROR: %s." % e.message print "Did you remember to fetch the 'lp:zeitgeist' and 'lp:fungtk' repositories?" print print "Please see the README file for more information, or contact us" print "in IRC channel #zeitgeist on Freenode (irc.freenode.net)." print "-" * 60 sys.exit(1) from src import config # Import zeitgeist.datamodel before running gettext.install, so that it doesn't # override the location we set (ie., "build/mo"). from zeitgeist import datamodel gettext.bindtextdomain('gnome-activity-journal', config.GETTEXT_PATH) gettext.textdomain('gnome-activity-journal') gettext.install('gnome-activity-journal', config.GETTEXT_PATH, unicode=True) parser = optparse.OptionParser(version=config.VERSION) parser.add_option("--debug", action = "store_true", default=False, dest="debug", help = _("print additional debugging information")) options, arguments = parser.parse_args() from src.external import CLIENT, CLIENT_VERSION if CLIENT_VERSION is None: sys.exit(1) elif CLIENT_VERSION < [0, 8, 0]: print "You need Zeitgeist 0.8.0 or later for the GNOME Activity Journal to work." print "https://launchpad.net/zeitgeist" sys.exit(1) from src.main import PortalWindow if __name__ == "__main__": portal = PortalWindow() gtk.gdk.threads_init() gtk.main() gnome-activity-journal-0.8.0/src/0000755000175000017500000000000011610346154016240 5ustar rainctrainctgnome-activity-journal-0.8.0/src/content_objects.py0000644000175000017500000007437411565730047022023 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2010 Randal Barlow # Copyright © 2011 Stefano Candori # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Purpose: # Holds content objects which are something like the trackinfo objects used in # banshee. All of the display widgets should use these content objects instead # of events or uris. # import gio import glib import gtk import os import sys from urlparse import urlparse from xdg import DesktopEntry import xml.dom.minidom as dom from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation from config import get_icon_path, get_data_path, SUPPORTED_SOURCES from external import TELEPATHY # Fix for merging this and giofile import common from common import GioFile, THUMBS, ICONS, SIZE_LARGE, SIZE_NORMAL, SIZE_THUMBVIEW, SIZE_TIMELINEVIEW, INTERPRETATION_PARENTS class CachedAttribute(object): """ runs the method once, finds the value, and replace the descriptor in the instance with the found value """ def __init__(self, method, name=None): self.method = method self.attr_name = name or method.__name__ def __get__(self, instance, cls): if instance is None: return self value = self.method(instance) setattr(instance, self.attr_name, value) return value class AbstractContentObject(object): """ Keeps a list of instances of this class """ instances = [] content_object_types = [] _connections = {"add":[], "remove":[]} @classmethod def connect_to_manager(cls, signal, func): cls._connections[signal].append(func) return signal, cls._connections[signal].index(func) @classmethod def remove_manager_connection(cls, identity): del cls._connections[identity[0]][identity[1]] @classmethod def register_new_content_object_type(cls, content_object_type, index=None): if index != None: cls.content_object_types.insert(index, content_object_type) else: cls.content_object_types.append(content_object_type) for func in cls._connections["add"]: func(content_object_type) @classmethod def remove_content_object_type(cls, content_object_type): cls.content_object_types.remove(content_object_type) for func in cls._connections["remove"]: func(content_object_type) @classmethod def new_from_event(cls, event): """ :param event: a zeitgeist.datamodel.Event :returns a instance of the best possible ContentObject subclass or None if no correct Content Object was found or if that the correct Content object rejected the given event """ for obj in cls.content_object_types: instance = obj.use_class(event) if instance: return instance.create(event) if event.subjects[0].uri.startswith("file://"): return FileContentObject.create(event) return GenericContentObject.create(event) @classmethod def find_best_type_from_event(cls, event): """ :param event: a zeitgeist.datamodel.Event :returns a instance of the best possible ContentObject subclass or None if no correct Content Object was found or if that the correct Content object rejected the given event """ for obj in cls.content_object_types: instance = obj.use_class(event) if instance: return instance if event.subjects[0].uri.startswith("file://"): return FileContentObject return GenericContentObject def __init__(self): super(AbstractContentObject, self).__init__() self.instances.append(self) def __del__(self): self.instances.remove(self) return super(AbstractContentObject, self).__del__() class ContentObject(AbstractContentObject): """ Defines the required interface of a Content object. This is a abstract class. """ matches_search = False @classmethod def clear_search_matches(cls): map(lambda o: setattr(o, "matches_search", False), cls.instances) @classmethod def find_matching_events(cls, template): for obj in cls.instances: if obj.event.matches_template(template): yield obj @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event :param event: The event to test :returns: a object instance or False if this Content Object is not correct for this item """ if False: return cls return False def __init__(self, event): super(ContentObject, self).__init__() self._event = event @classmethod def create(cls, event): """ :param event: a zeitgeist event :returns: a ContentObject instance or None """ return cls(event) @property def event(self): return self._event @property def uri(self): return self.event.subjects[0].uri @property def mime_type(self): return self.event.subjects[0].mimetype # View methods @property def thumbview_pixbuf(self): """:returns: tuple with containing a pixbuf for the thumbview and a ispreview bool describing if it is a preview""" return None @property def timelineview_pixbuf(self): """:returns: tuple with containing a sized pixbuf for the timeline and a ispreview bool describing if it is a preview""" return None # Icon methods def get_icon(self, size=24, *args, **kwargs): """ :Returns: a pixbuf representing this event's icon """ return None @property def icon(self): return self.get_icon() @CachedAttribute def emblems(self): emblems = [] emblems.append(self.get_icon(16)) emblems.append(None) emblems.append(None) emblems.append(self.get_actor_pixbuf(16)) return emblems # utility def launch(self): """ Launches a event """ pass # Used for timeline phases = None # Thumbview and Timelineview methods @CachedAttribute def type_color_representation(self): """ Uses the tango color pallet to find a color representing the content type :returns: a rgb tuple """ color1 = common.get_file_color(self.event.subjects[0].interpretation, self.event.subjects[0].mimetype) try: i = (common.TANGOCOLORS.index(color1)/3)*3 if i == common.TANGOCOLORS.index(color1): i += 1 color2 = common.TANGOCOLORS[i] except ValueError: color2 = common.TANGOCOLORS[-2] return (color1, color2) @CachedAttribute def text(self): return str(self.event.subjects[0].text) @CachedAttribute def timelineview_text(self): """ :returns: a string of text markup used in timeline widget and elsewhere """ try: interpretation = INTERPRETATION_PARENTS[self.event.subjects[0].interpretation] except Exception: interpretation = self.event.subjects[0].interpretation t = (common.FILETYPESNAMES[interpretation] if interpretation in common.FILETYPESNAMES.keys() else "Unknown") timelineview_text = (self.text+ "\n" + t).replace("%", "%%") return timelineview_text @CachedAttribute def thumbview_text(self): """ :returns: a string of text used in thumb widget and elsewhere """ return self.text def get_actor_desktop_file(self): """ Finds a desktop file for a actor """ desktop_file = None if self.event.actor in common.DESKTOP_FILES: return common.DESKTOP_FILES[self.event.actor] path = None for desktop_path in common.DESKTOP_FILE_PATHS: if os.path.exists(self.event.actor.replace("application://", desktop_path)): path = self.event.actor.replace("application://", desktop_path) break if path: desktop_file = DesktopEntry.DesktopEntry(path) common.DESKTOP_FILES[self.event.actor] = desktop_file return desktop_file def get_actor_pixbuf(self, size): """ Finds a icon for a actor :returns: a pixbuf """ desktop = self.get_actor_desktop_file() if not desktop: pixbuf = None else: name = desktop.getIcon() pixbuf = common.get_icon_for_name(name, size) return pixbuf def get_content(self): """ :returns: a string representing this content objects content """ return "" class FileContentObject(GioFile, ContentObject): """ Content object used to display events with subjects which are files """ @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.subjects[0].uri.startswith("file://"): return cls return False thumbnail_uri = "" molteplicity = False def __init__(self, event): ContentObject.__init__(self, event) uri = event.subjects[0].uri GioFile.__init__(self, uri) @classmethod def create(cls, event): try: return cls(event) except gio.Error: return None @CachedAttribute def text(self): return self._file_object.get_basename() @CachedAttribute def thumbview_pixbuf(self): """ Special method which returns a pixbuf for the thumbview and a ispreview bool describing if it is a preview """ thumbview_pixbuf, isthumb = common.PIXBUFCACHE.get_pixbuf_from_uri(self.uri, SIZE_LARGE) return thumbview_pixbuf, isthumb @CachedAttribute def timelineview_pixbuf(self): """Special method which returns a sized pixbuf for the timeline and a ispreview bool describing if it is a preview""" usethumb = (True if self.event.subjects[0].interpretation in common.MEDIAINTERPRETATIONS else False) thumb = False if common.PIXBUFCACHE.has_key(self.uri) and usethumb: pixbuf, thumb = common.PIXBUFCACHE[self.uri] pixbuf = pixbuf.scale_simple(32, 24, gtk.gdk.INTERP_TILES) else: pixbuf = common.get_icon_from_object_at_uri(self.uri, 24) if common.PIXBUFCACHE.has_key(self.uri) and usethumb and pixbuf != common.PIXBUFCACHE[self.uri][0]: pixbuf, thumb = common.PIXBUFCACHE[self.uri] pixbuf = pixbuf.scale_simple(32, 24, gtk.gdk.INTERP_TILES) if not pixbuf: pixbuf = common.PLACEHOLDER_PIXBUFFS[24] is_thumbnail = usethumb&thumb return pixbuf def get_thumbview_pixbuf_for_size(self, w, h): pix, isthumb = self.thumbview_pixbuf if pix is not None: if isthumb: pix = common.scale_to_fill(pix, w, h) else: pix = pix.scale_simple(w // 2, w // 2, gtk.gdk.INTERP_BILINEAR) return pix,isthumb class BaseContentType(ContentObject): """ A Base content type which has 6 fields which define the automated content type creation. The string fields are ran into string format where formatting is done. The keywords are as follows: event is the event content_obj is self interpretation is the event interpretation subject_interpretation is the first subjects interpretation source = the SUPPORTED_SOURCES source for the interpretation if icon_name is equal to $ACTOR then the actor icon is used if icon_name is equal to $MIME then the MIME icon is used """ # default fields which subclasses can modify icon_name = "" icon_uri = "" thumbnail_uri = "" text = "" timelineview_text = "" thumbview_text = "" #Field used to group particular type of event like #website or irc chats in thumb and timeline view molteplicity = False # Attributes of this class which will be ran into string format as described # in this class's doctstring fields_to_format = ("text", "timelineview_text", "thumbview_text") def __init__(self, event): super(BaseContentType, self).__init__(event) # String formatting self.wrds = wrds = { "content_obj" : self, "event" : event } try: wrds["interpretation"] = Interpretation[event.interpretation] except KeyError: wrds["interpretation"] = Interpretation.ACCESS_EVENT try: wrds["subject_interpretation"] = Interpretation[event.subjects[0].interpretation] except KeyError: wrds["subject_interpretation"] = Interpretation try: wrds["source"] = SUPPORTED_SOURCES[self.event.subjects[0].interpretation] except Exception: wrds["source"] = SUPPORTED_SOURCES[""] try: wrds["manifestation"] = Manifestation[event.manifestation] except Exception: wrds["manifestation"] = Manifestation for name in self.fields_to_format: val = getattr(self, name) setattr(self, name, val.format(**wrds)) def get_icon(self, size=24, *args, **kwargs): icon = False try: while not icon: if "$MIME" in self.icon_name: icon = common.get_icon_for_name(self.mime_type.replace("/", "-"), size) if icon != None: return icon if "$ACTOR" in self.icon_name: icon = self.get_actor_pixbuf(size) if self.icon_uri: icon = common.get_icon_for_uri(self.icon_uri, size) elif self.icon_name and self.icon_name not in ("$MIME", "$ACTOR"): icon = common.get_icon_for_name(self.icon_name, size) break except glib.GError: if common.PLACEHOLDER_PIXBUFFS.has_key(size): return common.PLACEHOLDER_PIXBUFFS[size] #if i can't find any icon for this event i use the default one if not icon: if common.PLACEHOLDER_PIXBUFFS.has_key(size): return common.PLACEHOLDER_PIXBUFFS[size] return icon @CachedAttribute def thumbview_pixbuf(self): """Special method which returns a pixbuf for the thumbview and a ispreview bool describing if it is a preview""" isthumb = False if self.thumbnail_uri: thumbview_pixbuf, isthumb = common.PIXBUFCACHE.get_pixbuf_from_uri( self.uri, SIZE_LARGE) else: thumbview_pixbuf = self.get_icon(SIZE_NORMAL[0]) return thumbview_pixbuf, isthumb def get_thumbview_pixbuf_for_size(self, w, h): pix, isthumb = self.thumbview_pixbuf if pix is not None: if isthumb: pix = common.scale_to_fill(pix, w, h) else: pix = pix.scale_simple(w // 2, w // 2, gtk.gdk.INTERP_BILINEAR) return pix,isthumb @CachedAttribute def timelineview_pixbuf(self): """Special method which returns a sized pixbuf for the timeline and a ispreview bool describing if it is a preview""" icon = self.get_icon(SIZE_TIMELINEVIEW[1][1]) if not icon: icon = common.PLACEHOLDER_PIXBUFFS[24] return icon @CachedAttribute def emblems(self): emblems = [] if (not self.thumbnail_uri) and self.icon_name != "$ACTOR": emblems.append(self.get_icon(16)) else: emblems.append(None) emblems.append(None) emblems.append(None) emblems.append(self.get_actor_pixbuf(16)) return emblems def launch(self): desktop = self.get_actor_desktop_file() if desktop: command = desktop.getExec() try: if "%u" in command: command = command.replace("%u", self.uri) elif "%U" in command: command = command.replace("%U", self.uri) common.launch_string_command(command) except OSError: return class GenericContentObject(BaseContentType): """ Used when no other content type would fit """ if sys.version_info >= (2,6): icon_name = "$MIME $ACTOR" text = "{event.subjects[0].text}" timelineview_text = "{subject_interpretation.display_name}\n{event.subjects[0].uri}" thumbview_text = "{subject_interpretation.display_name}\n{event.subjects[0].text}" else: def __init__(self, event): super(BaseContentType, self).__init__(event) # String formatting self.wrds = wrds = { } try: wrds["interpretation"] = Interpretation[event.interpretation] except KeyError: wrds["interpretation"] = Interpretation.ACCESS_EVENT try: wrds["subject_interpretation"] = INTERPRETATION_PARENTS[Interpretation[event.subjects[0].interpretation]] except KeyError: wrds["subject_interpretation"] = Interpretation try: wrds["source"] = SUPPORTED_SOURCES[self.event.subjects[0].interpretation] except Exception: wrds["source"] = SUPPORTED_SOURCES[""] @CachedAttribute def text(self): return self.event.subjects[0].text @CachedAttribute def timelineview_text(self): return self.wrds["subject_interpretation"].display_name + "\n" + self.event.subjects[0].uri @CachedAttribute def thumbview_text(self): return self.wrds["subject_interpretation"].display_name + "\n" + self.event.subjects[0].text def get_icon(self, size=24, *args, **kwargs): icon = common.get_icon_for_name(self.mime_type.replace("/", "-"), size) if icon: return icon icon = self.get_actor_pixbuf(size) if icon: return icon if common.PLACEHOLDER_PIXBUFFS.has_key(size): return common.PLACEHOLDER_PIXBUFFS[size] icon = self.get_actor_pixbuf(size) return icon class BzrContentObject(BaseContentType): @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.actor == "application://bzr.desktop": return cls return False #icon_uri = "/usr/share/pixmaps/bzr-icon-64.png" icon_name = "bzr-icon-64" text = "{event.subjects[0].text}" timelineview_text = "Bazaar\n{event.subjects[0].text}" thumbview_text = "Bazaar\n{event.subjects[0].text}" type_color_representation = common.TANGOCOLORS[1], common.TANGOCOLORS[2] def launch(self): if common.is_command_available("xdg-open"): common.launch_command("xdg-open", [self.uri]) class IMContentObject(BaseContentType): @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.subjects[0].interpretation == Interpretation.IMMESSAGE.uri \ and event.actor != "application://xchat.desktop": return cls return False type_color_representation = common.TANGOCOLORS[13], common.TANGOCOLORS[14] icon_name = "empathy" if not TELEPATHY: text = _("{source._desc_sing} with {event.subjects[0].text}") timelineview_text = _("{source._desc_sing} with {event.subjects[0].text}\n{event.subjects[0].uri}") thumbview_text = _("{source._desc_sing} with {event.subjects[0].text}") def launch(self): if common.is_command_available("empathy"): common.launch_command("empathy", [self.uri]) else: fields_to_format = ()#"text", "thumbview_text") status_symbols = { "available" : u" " + _("Available") + "", "offline" : u" " + _("Offline") + "", "away" : u" " + _("Away") + "", "busy" : u" " + _("Busy") + "", } status_icon_funcs = { "available" : lambda s: common.get_icon_for_name("empathy-available", s), "offline" : lambda s: common.get_icon_for_name("empathy-offline", s), "away" : lambda s: common.get_icon_for_name("empathy-away", s), "busy" : lambda s: common.get_icon_for_name("empathy-busy", s), } def get_subject_status(self): return "offline" def get_subject_status_string(self): """ :returns: the status string from status_symbols according to the subjects status in telepathy !!to be implemented!! """ return self.status_symbols[self.get_subject_status()] def get_icon(self, size=24, *args, **kwargs): status = self.get_subject_status() if size in (24, 48): try: return self.status_icon_funcs[status](size) except Exception: pass return BaseContentType.get_icon(self, size, *args, **kwargs) @property def text(self): status = self.get_subject_status_string() return self.wrds["source"]._desc_sing + " " + _("with") + " " + self.event.subjects[0].text @property def timelineview_text(self): status = self.get_subject_status_string() return self.wrds["source"]._desc_sing + " " + _("with") + " " + self.event.subjects[0].text + "\n" + self.uri + status @property def thumbview_text(self): status = self.get_subject_status_string() return self.wrds["source"]._desc_sing + " " + _("with") + " " + self.event.subjects[0].text + "\n" + status def launch(self): if common.is_command_available("empathy"): common.launch_command("empathy", [self.uri]) class WebContentObject(BaseContentType): """ Displays page visits We can write dataproviders which generate pixbufs and the thumbnail_uri property request will find it for the thumbview """ @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.subjects[0].uri.startswith(("http://", "https://")): return cls return False molteplicity = True @CachedAttribute def molteplicity_text(self): return _("Surfed in ") + urlparse(self.uri).netloc icon_name = "$MIME $ACTOR" # thumbnail_uri = "/some/users/cache/hash(uri).png" text = "{event.subjects[0].text}" timelineview_text = "{event.subjects[0].uri}" thumbview_text = "{event.subjects[0].text}" #type_color_representation = (207/255.0, 77/255.0, 16/255.0), (207/255.0, 77/255.0, 16/255.0) class HamsterContentObject(BaseContentType): """ Used for Hamster(time tracker) """ @classmethod def use_class(cls, event): if event.actor == "application://hamster-standalone.desktop": return cls return False _prefix = _("Time Tracker") icon_name = "hamster-applet" text = _prefix + ": {event.subjects[0].text}" timelineview_text = _prefix + "\n{event.subjects[0].text}" thumbview_text = _prefix + "\n{event.subjects[0].text}" class XChatContentObject(BaseContentType): """ Used for Xchat(irc client) """ @classmethod def use_class(cls, event): if event.actor == "application://xchat.desktop": return cls return False molteplicity = True @CachedAttribute def molteplicity_text(self): return _("Chatted in ") + urlparse(self.uri).netloc icon_name = "$ACTOR" _text = "{event.subjects[0].text}" _timelineview_text = "{event.subjects[0].text}" _thumbview_text = "{event.subjects[0].text}" @CachedAttribute def is_channel(self): return self.uri.split("/")[-1].startswith("#") @CachedAttribute def buddy_or_channel(self): return self.uri.split("/")[-1] @CachedAttribute def text(self): if self.is_channel: if self.event.interpretation in \ [Interpretation.SEND_EVENT.uri, Interpretation.RECEIVE_EVENT.uri]: return "{source._desc_sing} in " + self.buddy_or_channel else: return self._text else: return "{source._desc_sing} with " + self.buddy_or_channel @CachedAttribute def timelineview_text(self): if self.is_channel: if self.event.interpretation in \ [Interpretation.SEND_EVENT.uri, Interpretation.RECEIVE_EVENT.uri]: return "{source._desc_sing} in " + self.buddy_or_channel else: return self._timelineview_text else: return "{source._desc_sing} with " + self.buddy_or_channel @CachedAttribute def thumbview_text(self): if self.is_channel: if self.event.interpretation in \ [Interpretation.SEND_EVENT.uri, Interpretation.RECEIVE_EVENT.uri]: return "{source._desc_sing} in " + self.buddy_or_channel else: return self._thumbview_text else: return "{source._desc_sing} with " + self.buddy_or_channel def launch(self): if common.is_command_available("xchat"): if self.is_channel: common.launch_command("xchat", ["-e", "--url=" + self.uri]) class EmailContentObject(BaseContentType): """ An Email Content Object where any additional subjects are considered attachments """ @classmethod def use_class(cls, event): if event.subjects[0].interpretation == Interpretation.EMAIL: return cls return False icon_name = "$MIME $ACTOR" fields_to_format = ("_text", "_timelineview_text", "_thumbview_text") _text = _("{source._desc_sing} from {event.subjects[0].text}") _timelineview_text = _("{source._desc_sing} from {event.subjects[0].text}\n{event.subjects[0].uri}") _thumbview_text = _("{source._desc_sing} from {event.subjects[0].text}") @CachedAttribute def _attachment_string(self): return (_(" (%s Attachments)") % str(len(self.event.subjects))) @CachedAttribute def text(self): return self._text + self._attachment_string @CachedAttribute def timelineview_text(self): return self._timelineview_text + self._attachment_string @CachedAttribute def thumbview_text(self): return self._thumbview_text + self._attachment_string class TomboyContentObject(BaseContentType): @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.actor == "application://tomboy.desktop": return cls return False icon_name = "$ACTOR" text = _("{event.subjects[0].text}") timelineview_text = _("Note\n{event.subjects[0].text}") thumbview_text = _("Note\n{event.subjects[0].text}") type_color_representation = common.TANGOCOLORS[0], common.TANGOCOLORS[2] def launch(self): if common.is_command_available("tomboy"): common.launch_command("tomboy", ["--open-note", self.uri]) class GTGContentObject(BaseContentType): @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.actor == "application://gtg.desktop": return cls return False icon_name = "$ACTOR" text = _("{source._desc_sing} {event.subjects[0].text}") timelineview_text = _("GTG\n{source._desc_sing} {event.subjects[0].text}") thumbview_text = _("GTG\n{source._desc_sing} {event.subjects[0].text}") type_color_representation = common.TANGOCOLORS[0], common.TANGOCOLORS[2] def launch(self): if common.is_command_available("gtg"): common.launch_command("gtg", [self.uri]) class MusicPlayerContentObject(BaseContentType): """Used by music players when the backing subject is not a file""" @classmethod def use_class(cls, event): """ Used by the content object chooser to check if the content object will work for the event""" if event.actor in ("application://banshee.desktop", "application://rhythmbox.desktop") \ and not event.subjects[0].uri.startswith("file://"): return cls return False icon_name = "$MIME $ACTOR" text = "{event.subjects[0].text}" timelineview_text = "{event.subjects[0].text}" thumbview_text = "{event.subjects[0].text}" @CachedAttribute def mime_type(self): event_mime = self.event.subjects[0].mimetype or "" if "audio" not in event_mime or "video" not in event_mime: interpretation = self.event.subjects[0].interpretation if Interpretation.VIDEO.uri == interpretation: event_mime = "video/mpeg" elif Interpretation.AUDIO.uri == interpretation: event_mime = "audio/x-mpeg" else: event_mime = "audio/x-mpeg" return event_mime # Content object list used by the section function. Should use Subclasses but I like to have some order in which these should be used if sys.version_info >= (2,6): map(AbstractContentObject.content_object_types.append, (MusicPlayerContentObject, BzrContentObject, WebContentObject,XChatContentObject, IMContentObject, TomboyContentObject, GTGContentObject, EmailContentObject, HamsterContentObject)) gnome-activity-journal-0.8.0/src/supporting_widgets.py0000644000175000017500000020151211565730047022562 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009-2010 Seif Lotfy # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Markus Korn # Copyright © 2010 Randal Barlow # Copyright © 2010 Stefano Candori # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from __future__ import with_statement import cairo import os import gobject import gtk import gettext import datetime import math import time import pango import gio import threading from dbus.exceptions import DBusException try: import gst except ImportError: gst = None from zeitgeist.datamodel import Event, Subject, StorageState from common import * import content_objects from config import BASE_PATH, VERSION, settings, PluginManager, get_icon_path, get_data_path, bookmarker, SUPPORTED_SOURCES import external from store import STORE, get_related_events_for_uri, CLIENT class DayLabel(gtk.DrawingArea): _events = ( gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.KEY_PRESS_MASK | gtk.gdk.BUTTON_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.BUTTON_PRESS_MASK ) def __init__(self,date=None): super(DayLabel, self).__init__() self.set_events(self._events) self.connect("expose_event", self.expose) if date: self.date = date else: self.date = datetime.date.today() self.set_size_request(100, 60) @property def date_string(self): return self.date.strftime("%x") @property def weekday_string(self): if self.date == datetime.date.today(): return _("Today") timedelta = datetime.date.today() -self.date if timedelta.days == 1: return _("Yesterday") return self.date.strftime("%A") @property def leading(self): if self.date == datetime.date.today(): return True def set_date(self, date): self.date = date self.queue_draw() def expose(self, widget, event): context = widget.window.cairo_create() self.context = context self.font_name = self.style.font_desc.get_family() widget.style.set_background(widget.window, gtk.STATE_NORMAL) # set a clip region for the expose event context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() self.draw(widget, event, context) self.day_text(widget, event, context) return False def day_text(self, widget, event, context): actual_y = self.get_size_request()[1] gx, gy, gw, gh, gq = widget.window.get_geometry() y = actual_y if actual_y > gh else gh; x = gw gc = self.style.fg_gc[gtk.STATE_SELECTED if self.leading else gtk.STATE_NORMAL] layout = widget.create_pango_layout(self.weekday_string) layout.set_font_description(pango.FontDescription(self.font_name + " Bold 15")) w, h = layout.get_pixel_size() widget.window.draw_layout(gc, (x-w)/2, (y)/2 - h + 5, layout) self.date_text(widget, event, context, (y)/2 + 5) def date_text(self, widget, event, context, lastfontheight): gx, gy, gw, gh, gq = widget.window.get_geometry() gc = self.style.fg_gc[gtk.STATE_SELECTED if self.leading else gtk.STATE_INSENSITIVE] layout = widget.create_pango_layout(self.date_string) layout.set_font_description(pango.FontDescription(self.font_name + " 10")) w, h = layout.get_pixel_size() widget.window.draw_layout(gc, (gw-w)/2, lastfontheight, layout) def draw(self, widget, event, context): gx, gy, w, h, gq = widget.window.get_geometry() if self.leading: bg = self.style.bg[gtk.STATE_SELECTED] red, green, blue = bg.red/65535.0, bg.green/65535.0, bg.blue/65535.0 else: bg = self.style.bg[gtk.STATE_NORMAL] red = (bg.red * 125 / 100)/65535.0 green = (bg.green * 125 / 100)/65535.0 blue = (bg.blue * 125 / 100)/65535.0 x = 0; y = 0 r = 5 context.set_source_rgba(red, green, blue, 1) context.new_sub_path() context.arc(r+x, r+y, r, math.pi, 3 * math.pi /2) context.arc(w-r, r+y, r, 3 * math.pi / 2, 0) context.close_path() context.rectangle(0, r, w, h) context.fill_preserve() class DayButton(gtk.DrawingArea): leading = False pressed = False today_pressed = False sensitive = True today_hover = False hover = False header_size = 60 bg_color = (0, 0, 0, 0) header_color = (1, 1, 1, 1) leading_header_color = (1, 1, 1, 1) internal_color = (0, 1, 0, 1) arrow_color = (1, 1, 1, 1) arrow_color_selected = (1, 1, 1, 1) __gsignals__ = { "clicked": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,()), "jump-to-today": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,()), } _events = ( gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.KEY_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.MOTION_NOTIFY | gtk.gdk.POINTER_MOTION_MASK ) @classmethod def new(cls, side = 0, sensitive=True): button = DayButton(side, sensitive) def query_tooltip(widget, x, y, keyboard_mode, tooltip, ebutton): if not ebutton.sensitive: return False elif y < ebutton.header_size and ebutton.side == 1: text = _("Go to Today") elif y >= ebutton.header_size: text = _("Go to the previous day ") if ebutton.side == 0 else _("Go to the next day") else: return False tooltip.set_text(text) return True evbox = gtk.EventBox() evbox.connect("query-tooltip", query_tooltip, button) evbox.set_property("has-tooltip", True) evbox.add(button) return button, evbox def __init__(self, side = 0, sensitive=True): super(DayButton, self).__init__() self.set_events(self._events) self.set_flags(gtk.CAN_FOCUS) self.side = side self.connect("button_press_event", self.on_press) self.connect("button_release_event", self.clicked_sender) self.connect("key_press_event", self.keyboard_clicked_sender) self.connect("motion_notify_event", self.on_hover) self.connect("leave_notify_event", self._enter_leave_notify, False) self.connect("expose_event", self.expose) self.connect("style-set", self.change_style) self.set_size_request(20, -1) self.set_sensitive(sensitive) def set_leading(self, leading): self.leading = leading def set_sensitive(self, case): self.sensitive = case self.queue_draw() def _enter_leave_notify(self, widget, event, bol): self.hover = bol self.today_hover = bol self.queue_draw() def on_hover(self, widget, event): if event.y > self.header_size: if not self.hover: self.hover = True else: self.today_hover = False else: if self.hover: self.hover = False else: self.today_hover = True self.queue_draw() return False def on_press(self, widget, event): if event.y > self.header_size: self.pressed = True else: self.today_pressed = True self.queue_draw() def keyboard_clicked_sender(self, widget, event): if event.keyval in (gtk.keysyms.Return, gtk.keysyms.space): if self.sensitive: self.emit("clicked") self.pressed = False self.queue_draw() return True return False def clicked_sender(self, widget, event): if event.y > self.header_size: if self.sensitive: self.emit("clicked") elif event.y < self.header_size: self.emit("jump-to-today") self.pressed = False self.today_pressed = False; self.queue_draw() return True def change_style(self, *args, **kwargs): self.bg_color = get_gtk_rgba(self.style, "bg", 0) self.header_color = get_gtk_rgba(self.style, "bg", 0, 1.25) self.leading_header_color = get_gtk_rgba(self.style, "bg", 3) self.internal_color = get_gtk_rgba(self.style, "bg", 0, 1.02) self.arrow_color = get_gtk_rgba(self.style, "text", 0, 0.6) self.arrow_color_selected = get_gtk_rgba(self.style, "bg", 3) self.arrow_color_insensitive = get_gtk_rgba(self.style, "text", 4) def expose(self, widget, event): context = widget.window.cairo_create() context.set_source_rgba(*self.bg_color) context.set_operator(cairo.OPERATOR_SOURCE) context.paint() context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() x = 0; y = 0 r = 5 gx, gy, w, h, gq = widget.window.get_geometry() size = 20 if self.sensitive: context.set_source_rgba(*(self.leading_header_color if self.leading else self.header_color)) context.new_sub_path() context.move_to(x+r,y) context.line_to(x+w-r,y) context.curve_to(x+w,y,x+w,y,x+w,y+r) context.line_to(x+w,y+h-r) context.curve_to(x+w,y+h,x+w,y+h,x+w-r,y+h) context.line_to(x+r,y+h) context.curve_to(x,y+h,x,y+h,x,y+h-r) context.line_to(x,y+r) context.curve_to(x,y,x,y,x+r,y) # What's this for, exactly? Appears to have been already set. #context.set_source_rgba(*(self.leading_header_color if self.leading else self.header_color)) context.close_path() context.rectangle(0, r, w, self.header_size) context.fill() context.set_source_rgba(*self.internal_color) context.rectangle(0, self.header_size, w, h) context.fill() if self.hover: widget.style.paint_box(widget.window, gtk.STATE_PRELIGHT, gtk.SHADOW_OUT, event.area, widget, "button", event.area.x, self.header_size, w, h-self.header_size) if self.side > 0 and self.today_hover: widget.style.paint_box(widget.window, gtk.STATE_PRELIGHT, gtk.SHADOW_OUT, event.area, widget, "button", event.area.x, 0, w, self.header_size) size = 10 if not self.sensitive: state = gtk.STATE_INSENSITIVE elif self.is_focus() or self.pressed: widget.style.paint_focus(widget.window, gtk.STATE_ACTIVE, event.area, widget, None, event.area.x, self.header_size, w, h-self.header_size) state = gtk.STATE_SELECTED else: state = gtk.STATE_NORMAL arrow = gtk.ARROW_RIGHT if self.side else gtk.ARROW_LEFT self.style.paint_arrow(widget.window, state, gtk.SHADOW_NONE, None, self, "arrow", arrow, True, w/2-size/2, h/2 + size/2, size, size) size = 7 # Paint today button arrows. if self.sensitive and self.side > 0: if self.today_hover: if self.today_pressed: self.style.paint_arrow(widget.window, gtk.STATE_SELECTED, gtk.SHADOW_NONE, None, self, "arrow", arrow, True, w/2, self.header_size/2 - size/2, size, size) self.style.paint_arrow(widget.window, gtk.STATE_SELECTED, gtk.SHADOW_OUT, None, self, "arrow", arrow, True, w/2-size/2, self.header_size/2 - size/2, size, size) else: self.style.paint_arrow(widget.window, state, gtk.SHADOW_NONE, None, self, "arrow", arrow, True, w/2, self.header_size/2 - size/2, size, size) self.style.paint_arrow(widget.window, state, gtk.SHADOW_OUT, None, self, "arrow", arrow, True, w/2-size/2, self.header_size/2 - size/2, size, size) else: self.style.paint_arrow(widget.window, gtk.STATE_SELECTED, gtk.SHADOW_NONE, None, self, "arrow", arrow, True, w/2, self.header_size/2 - size/2, size, size) self.style.paint_arrow(widget.window, gtk.STATE_SELECTED, gtk.SHADOW_OUT, None, self, "arrow", arrow, True, w/2-size/2, self.header_size/2 - size/2, size, size) #return class SearchBox(gtk.ToolItem): __gsignals__ = { "clear" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), "search" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) } @property def use_fts(self): #if STORE.fts_search_enabled: # return self.fts_checkbutton.get_active() return False def __init__(self): gtk.ToolItem.__init__(self) self.text = "" self.callback = None self.set_border_width(3) self.hbox = gtk.HBox() self.add(self.hbox) self.results = [] self.search = SearchEntry() self.hbox.pack_start(self.search) self.category = {} #if STORE.fts_search_enabled: # self.fts_checkbutton = gtk.CheckButton(_("Use Zeitgeist FTS")) for source in SUPPORTED_SOURCES.keys(): s = SUPPORTED_SOURCES[source]._desc_pl self.category[s] = source self.combobox = gtk.combo_box_new_text() self.combobox.set_focus_on_click(False) self.hbox.pack_start(self.combobox, False, False, 6) #if STORE.fts_search_enabled: # self.hbox.pack_end(self.fts_checkbutton) self.combobox.append_text("All activities") self.combobox.set_active(0) for cat in self.category.keys(): self.combobox.append_text(cat) self.show_all() def change_style(widget, style): rc_style = self.style color = rc_style.bg[gtk.STATE_NORMAL] color = shade_gdk_color(color, 102/100.0) self.modify_bg(gtk.STATE_NORMAL, color) color = rc_style.bg[gtk.STATE_NORMAL] fcolor = rc_style.fg[gtk.STATE_NORMAL] color = combine_gdk_color(color, fcolor) self.search.modify_text(gtk.STATE_NORMAL, color) self.hbox.connect("style-set", change_style) self.search.connect("search", self.set_search) self.search.connect("clear", self.clear) self.connect("search", self.__search) def clear(self, widget): if self.text.strip() != "" and self.text.strip() != self.search.default_text: self.text = "" self.search.set_text("") self.results = [] self.emit("clear") def set_search(self, widget, text=None): if not self.text.strip() == text.strip(): self.text = text def callback(results): self.results = results self.emit("search", results) if not text: text = self.search.get_text() if text == self.search.default_text or text.strip() == "": pass else: cat = self.combobox.get_active() if cat == 0: interpretation = None else: cat = self.category[self.combobox.get_active_text()] interpretation = self.category[self.combobox.get_active_text()] if interpretation: return self.do_search(text, callback, interpretation) return self.do_search(text, callback) def do_search(self, text, callback=None, interpretation=None): if not callback: return self.do_search_objs(text, callback, interpretation) def do_search_objs(self, text, callback, interpretation=None): def _search(text, callback): if STORE.fts_search_enabled and self.use_fts: matching = STORE.search_using_zeitgeist_fts(text, [Event.new_for_values(subject_interpretation=interpretation)] if interpretation else []) else: def matching_test_function(obj): subject = obj.event.subjects[0] if text.lower() in subject.text.lower() or text in subject.uri: if interpretation: try: if subject.interpretation != interpretation: return False except Exception: return False return True return False matching = STORE.search_store_using_matching_function(matching_test_function) gtk.gdk.threads_enter() callback(matching) gtk.gdk.threads_leave() thread = threading.Thread(target=_search, args=(text, callback)) thread.start() def do_search_using_zeitgeist(self, text, callback=None, interpretation=""): if not text: return self.callback = callback templates = [ Event.new_for_values(subject_text="*"+text+"*", subject_interpretation=interpretation), Event.new_for_values(subject_uri="*"+text+"*", subject_interpretation=interpretation) ] CLIENT.find_event_ids_for_templates(templates, self._search_callback, storage_state=StorageState.Available, num_events=20, result_type=0) def _search_callback(self, ids): objs = [] for id_ in ids: try: obj.append(STORE[id_]) except KeyError: continue if self.callback: self.callback(objs) def toggle_visibility(self): if self.get_property("visible"): self.clear(None) self.hide() return False self.show() return True def __search(self, this, results): content_objects.ContentObject.clear_search_matches() for obj in results: if obj.content_object: setattr(obj.content_object, "matches_search", True) class SearchEntry(gtk.Entry): __gsignals__ = { "clear" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), "search" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), "close" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), } default_text = _("Type here to search...") # TODO: What is this? search_timeout = 0 def __init__(self, accel_group = None): gtk.Entry.__init__(self) self.set_width_chars(30) self.set_text(self.default_text) self.connect("changed", lambda w: self._queue_search()) self.connect("focus-in-event", self._entry_focus_in) self.connect("focus-out-event", self._entry_focus_out) self.set_icon_from_stock(0, gtk.STOCK_CANCEL) self.set_icon_from_stock(1, gtk.STOCK_CLEAR) self.connect("icon-press", self._icon_press) self.show_all() def _icon_press(self, widget, pos, event): if int(pos) == 1 and not self.get_text() == self.default_text: self._entry_clear_no_change_handler() elif event.button == 1 and pos == 0: self.emit("close") def _entry_focus_in(self, widget, x): if self.get_text() == self.default_text: self.set_text("") #self.modify_font(self.font_style) def _entry_focus_out(self, widget, x): if self.get_text() == "": self.set_text(self.default_text) #self.modify_font(self.font_style) def _entry_clear_no_change_handler(self): if not self.get_text() == self.default_text: self.set_text("") def _queue_search(self): if self.search_timeout != 0: gobject.source_remove(self.search_timeout) self.search_timeout = 0 if self.get_text() == self.default_text or len(self.get_text()) == 0: self.emit("clear") else: self.search_timeout = gobject.timeout_add(200, self._typing_timeout) def _typing_timeout(self): if len(self.get_text()) > 0: self.emit("search", self.get_text()) self.search_timeout = 0 return False class PreviewTooltip(gtk.Window): # per default we are using thumbs at a size of 128 * 128 px # in tooltips. For preview of text files we are using 256 * 256 px # which is dynamically defined in StaticPreviewTooltip.preview() TOOLTIP_SIZE = SIZE_NORMAL def __init__(self): gtk.Window.__init__(self, type=gtk.WINDOW_POPUP) def preview(self, gio_file): return False class StaticPreviewTooltip(PreviewTooltip): def __init__(self): super(StaticPreviewTooltip, self).__init__() self.__current = None self.__monitor = None def replace_content(self, content): children = self.get_children() if children: self.remove(children[0]) # hack to force the tooltip to have the exact same size # as the child image self.resize(1,1) self.add(content) def preview(self, gio_file): if gio_file == self.__current: return bool(self.__current) if self.__monitor is not None: self.__monitor.cancel() self.__current = gio_file self.__monitor = gio_file.get_monitor() self.__monitor.connect("changed", self._do_update_preview) # for text previews we are always using SIZE_LARGE if "text-x-generic" in gio_file.icon_names or "text-x-script" in gio_file.icon_names: size = SIZE_LARGE else: size = self.TOOLTIP_SIZE if not isinstance(gio_file, GioFile): return False pixbuf = gio_file.get_thumbnail(size=size, border=1) if pixbuf is None: self.__current = None return False img = gtk.image_new_from_pixbuf(pixbuf) img.set_alignment(0.5, 0.5) img.show_all() self.replace_content(img) del pixbuf, size return True def _do_update_preview(self, monitor, file, other_file, event_type): if event_type == gio.FILE_MONITOR_EVENT_CHANGES_DONE_HINT: if self.__current is not None: self.__current.refresh() self.__current = None gtk.tooltip_trigger_tooltip_query(gtk.gdk.display_get_default()) class VideoPreviewTooltip(PreviewTooltip): def __init__(self): PreviewTooltip.__init__(self) hbox = gtk.HBox() self.movie_window = gtk.DrawingArea() hbox.pack_start(self.movie_window) self.add(hbox) self.player = gst.element_factory_make("playbin2", "player") bus = self.player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect("message", self.on_message) bus.connect("sync-message::element", self.on_sync_message) self.connect("hide", self._handle_hide) self.connect("show", self._handle_show) self.set_default_size(*SIZE_LARGE) def _handle_hide(self, widget): self.hide_all() self.player.set_state(gst.STATE_NULL) def _handle_show(self, widget): self.show_all() self.player.set_state(gst.STATE_PLAYING) def preview(self, gio_file): if gio_file.uri == self.player.get_property("uri"): return True self.player.set_property("uri", gio_file.uri) return True def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: self.player.set_state(gst.STATE_NULL) self.hide_all() elif t == gst.MESSAGE_ERROR: self.player.set_state(gst.STATE_NULL) err, debug = message.parse_error() print "Error: %s" % err, debug def on_sync_message(self, bus, message): if message.structure is None: return message_name = message.structure.get_name() if message_name == "prepare-xwindow-id": imagesink = message.src imagesink.set_property("force-aspect-ratio", True) gtk.gdk.threads_enter() try: imagesink.set_xwindow_id(self.movie_window.window.xid) finally: gtk.gdk.threads_leave() class AudioPreviewTooltip(PreviewTooltip): def __init__(self): PreviewTooltip.__init__(self) #Playing label stuffs screen = self.get_screen() map_ = screen.get_rgba_colormap() if map_ is None: map_ = screen.get_rgb_colormap() self.set_colormap(map_) self.set_app_paintable(True) img = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY,gtk.ICON_SIZE_LARGE_TOOLBAR) self.image = AnimatedImage(get_data_path("zlogo/zg%d.png"), 150, size=20) self.image.start() label = gtk.Label() label.set_markup(_("Playing...")) hbox = gtk.HBox() hal = gtk.Alignment() hal.set_padding(0,0,5,0) hal.add(label) hbox.pack_start(self.image) hbox.pack_end(hal) self.resize(1,1) self.add(hbox) #GStreamer stuffs self.player = gst.element_factory_make("playbin2", "player") fakesink = gst.element_factory_make("fakesink", "fakesink") self.player.set_property("video-sink", fakesink) bus = self.player.get_bus() bus.add_signal_watch() bus.connect("message", self.on_message) self.connect("hide", self._handle_hide) self.connect("show", self._handle_show) self.connect("expose-event", self.transparent_expose) def transparent_expose(self, widget, event): cr = widget.window.cairo_create() cr.set_operator(cairo.OPERATOR_CLEAR) region = gtk.gdk.region_rectangle(event.area) cr.region(region) cr.fill() return False def _handle_hide(self, widget): self.image.stop() self.player.set_state(gst.STATE_NULL) def _handle_show(self, widget): self.image.start() self.show_all() self.player.set_state(gst.STATE_PLAYING) def preview(self, gio_file): if gio_file.uri == self.player.get_property("uri"): return True self.player.set_property("uri", gio_file.uri) return True def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: self.player.set_state(gst.STATE_NULL) elif t == gst.MESSAGE_ERROR: self.player.set_state(gst.STATE_NULL) err, debug = message.parse_error() print "Error: %s" % err, debug def replace_content(self, content): children = self.get_children() if children: self.remove(children[0]) # hack to force the tooltip to have the exact same size # as the child image self.resize(1,1) self.add(content) class AnimatedImage(gtk.Image): animating = None mod = 7 i = 0 speed = 100 def __init__(self, uri, speed = 0, size = 16): super(AnimatedImage, self).__init__() if speed: self.speed = speed self.frames = [] for i in (6, 5, 4, 3, 2, 1, 0): self.frames.append(gtk.gdk.pixbuf_new_from_file_at_size(get_icon_path(uri % i), size, size)) self.set_from_pixbuf(self.frames[0]) def next(self): """ Move to next frame """ self.set_from_pixbuf(self.frames[self.i % self.mod]) self.i += 1 return True def start(self): """ start the image's animation """ if self.animating: gobject.source_remove(self.animating) self.animating = gobject.timeout_add(self.speed, self.next) def stop(self): """ stop the image's animation """ if self.animating: gobject.source_remove(self.animating) self.animating = None return False def animate_for_seconds(self, seconds): """ :param seconds: int seconds for the amount of time when you want animate the throbber """ self.start() gobject.timeout_add_seconds(seconds, self.stop) class ThrobberPopupButton(gtk.ToolItem): __gsignals__ = { "toggle-erase-mode" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), } def __init__(self): super(ThrobberPopupButton, self).__init__() box = gtk.HBox() self.button = button = gtk.ToggleButton() button.set_relief(gtk.RELIEF_NONE) self.image = image = AnimatedImage(get_data_path("zlogo/zg%d.png"), 150) image.set_tooltip_text(_("Preferences")) arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE) arrow.set_size_request(10, 10) box.pack_start(image, True, True, 1) box.pack_start(arrow, True, True, 1) button.add(box) self.add(button) self.menu = gtk.Menu() self.about = get_menu_item_with_stock_id_and_text(gtk.STOCK_ABOUT, _("About")) self.preferences = get_menu_item_with_stock_id_and_text(gtk.STOCK_PREFERENCES, _("Preferences")) self.erase_mode = get_menu_item_with_stock_id_and_text(gtk.STOCK_CANCEL, _("Toggle Erase Mode")) for item in (self.about, self.erase_mode, self.preferences): self.menu.insert(item, 0) self.about.connect("activate", self.show_about_window) self.erase_mode.connect("activate", lambda x: self.emit("toggle-erase-mode")) self.menu.show_all() button.connect("toggled", self.on_toggle) self.preferences.connect("activate", lambda *args: self.preferences.toggle()) self.menu.connect("hide", self.on_hide) def on_hide(self, *args): self.button.set_active(False) self.menu.popdown() return False def on_toggle(self, widget): alloc = self.get_allocation() x, y = self.window.get_position() func = lambda a:(x+alloc.x, y+alloc.y+alloc.height, True) #print func(1,2) self.menu.popup(None, None, func, 0, 0) def show_about_window(self, *etc): aboutwindow = AboutDialog() window = self.get_toplevel() aboutwindow.set_transient_for(window) aboutwindow.run() aboutwindow.destroy() self.preferences.toggle() class AboutDialog(gtk.AboutDialog): name = "Activity Journal" authors = ( "Seif Lotfy ", "Randal Barlow ", "Siegfried-Angel Gevatter ", "Peter Lund ", "Hylke Bons ", "Markus Korn ", "Mikkel Kamstrup ", "Thorsten Prante ", "Stefano Candori " ) artists = ( "Hylke Bons ", "Thorsten Prante " ) copyright_ = "Copyright © 2009-2011 Activity Journal authors" comment = "A viewport into the past powered by Zeitgeist" version = VERSION def __init__(self): super(AboutDialog, self).__init__() self.set_name(self.name) self.set_version(self.version) self.set_comments(self.comment) self.set_copyright(self.copyright_) self.set_authors(self.authors) self.set_artists(self.artists) license = None for name in ("/usr/share/common-licenses/GPL", os.path.join(BASE_PATH, "COPYING")): if os.path.isfile(name): with open(name) as licensefile: license = licensefile.read() break if not license: license = "GNU General Public License, version 3 or later." self.set_license(license) #self.set_logo_icon_name("gnome-activity-journal") self.set_logo(gtk.gdk.pixbuf_new_from_file_at_size(get_icon_path( "hicolor/scalable/apps/gnome-activity-journal.svg"), 48, 48)) class ContextMenu(gtk.Menu): subjects = []# A list of Zeitgeist event uris infowindow = None parent_window = None def __init__(self): super(ContextMenu, self).__init__() self.menuitems = { "open" : gtk.ImageMenuItem(gtk.STOCK_OPEN), "unpin" : gtk.MenuItem(_("Remove Pin")), "pin" : gtk.MenuItem(_("Add Pin")), "delete" : get_menu_item_with_stock_id_and_text(gtk.STOCK_DELETE, _("Delete item from Journal")), "delete_uri" : gtk.MenuItem(_("Delete all events with this URI")), "info" : get_menu_item_with_stock_id_and_text(gtk.STOCK_INFO, _("More Information")), } callbacks = { "open" : self.do_open, "unpin" : self.do_unbookmark, "pin" : self.do_bookmark, "delete" : self.do_delete, "delete_uri" : self.do_delete_events_with_shared_uri, "info" : self.do_show_info, } names = ["open", "unpin", "pin", "delete", "delete_uri", "info"] if is_command_available("nautilus-sendto"): self.menuitems["sendto"] = get_menu_item_with_stock_id_and_text(gtk.STOCK_CONNECT, _("Send To...")) callbacks["sendto"] = self.do_send_to names.append("sendto") for name in names: item = self.menuitems[name] self.append(item) item.connect("activate", callbacks[name]) self.show_all() def do_popup(self, time, subjects): """ Call this method to popup the context menu :param time: the event time from the button press event :param subjects: a list of uris """ self.subjects = subjects if len(subjects) == 1: uri = subjects[0].uri if bookmarker.is_bookmarked(uri): self.menuitems["pin"].hide() self.menuitems["unpin"].show() else: self.menuitems["pin"].show() self.menuitems["unpin"].hide() self.popup(None, None, None, 3, time) def do_open(self, menuitem): for obj in self.subjects: obj.launch() def do_show_info(self, menuitem): if self.subjects: if self.infowindow: self.infowindow.destroy() self.infowindow = InformationContainer(parent=self.parent_window) self.infowindow.set_content_object(self.subjects[0]) self.infowindow.show_all() def do_bookmark(self, menuitem): for obj in self.subjects: uri = obj.uri uri = unicode(uri) isbookmarked = bookmarker.is_bookmarked(uri) if not isbookmarked: bookmarker.bookmark(uri) def do_unbookmark(self, menuitem): for obj in self.subjects: uri = obj.uri uri = unicode(uri) isbookmarked = bookmarker.is_bookmarked(uri) if isbookmarked: bookmarker.unbookmark(uri) def do_delete(self, menuitem): for obj in self.subjects: CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=obj.uri), lambda ids: CLIENT.delete_events(map(int, ids)), timerange=DayParts.get_day_part_range_for_item(obj)) def do_delete_object(self, obj): if obj is None: return CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=obj.uri), lambda ids: CLIENT.delete_events(map(int, ids))) def do_delete_events_with_shared_uri(self, menuitem): for uri in map(lambda obj: obj.uri, self.subjects): CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=uri), lambda ids: CLIENT.delete_events(map(int, ids))) def do_send_to(self, menuitem): launch_command("nautilus-sendto", map(lambda obj: obj.uri, self.subjects)) def set_parent_window(self, parent): self.parent_window = parent class ContextMenuMolteplicity(gtk.Menu): subjects = []# A list of Zeitgeist event uris infowindow = None parent_window = None def __init__(self): super(ContextMenuMolteplicity, self).__init__() self.menuitems = { "delete" : get_menu_item_with_stock_id_and_text(gtk.STOCK_DELETE, _("Delete items from Journal")), "info" : get_menu_item_with_stock_id_and_text(gtk.STOCK_INFO, _("Show all grouped items")) } callbacks = { "delete" : self.do_delete, "info" : self.do_show_info } names = ["delete", "info"] for name in names: item = self.menuitems[name] self.append(item) item.connect("activate", callbacks[name]) self.show_all() def do_popup(self, time, subjects): """ Call this method to popup the context menu :param time: the event time from the button press event :param subjects: a list of uris """ self.subjects = subjects if len(subjects) == 1: uri = subjects[0].uri self.popup(None, None, None, 3, time) def do_show_info(self, menuitem): if self.subjects: self.do_show_molteplicity_list(self.subjects) def do_show_molteplicity_list(self, item_list): if item_list: if self.infowindow: self.infowindow.destroy() self.infowindow = MolteplicityInformationContainer(parent=self.parent_window) self.infowindow.set_item_list(item_list) self.infowindow.show_all() def do_delete(self, menuitem): for obj_ in self.subjects: obj = obj_.content_object CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=obj.uri), lambda ids: CLIENT.delete_events(map(int, ids)), timerange=DayParts.get_day_part_range_for_item(obj)) def do_delete_list(self, list_): for obj_ in list_: obj = obj_.content_object CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=obj.uri), lambda ids: CLIENT.delete_events(map(int, ids)), timerange=DayParts.get_day_part_range_for_item(obj)) def set_parent_window(self, parent): self.parent_window = parent class ToolButton(gtk.RadioToolButton): def __init__(self, *args, **kwargs): super(ToolButton, self).__init__(*args, **kwargs) def set_label(self, text): super(ToolButton, self).set_label(text) self.set_tooltip_text(text) def set_tooltip_text(self, text): gtk.Widget.set_tooltip_text(self, text) class InformationToolButton(gtk.ToolButton): def __init__(self, *args, **kwargs): super(InformationToolButton, self).__init__(*args, **kwargs) def set_label(self, text): super(InformationToolButton, self).set_label(text) self.set_tooltip_text(text) def set_tooltip_text(self, text): gtk.Widget.set_tooltip_text(self, text) class Toolbar(gtk.Toolbar): __gsignals__ = { "previous" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), "jump-to-today" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), "next" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), } @staticmethod def get_toolbutton(path, label_string, radio=True): if radio: button = ToolButton() else: button = InformationToolButton() pixbuf = gtk.gdk.pixbuf_new_from_file(path) image = gtk.Image() image.set_from_pixbuf(pixbuf) button.set_icon_widget(image) button.set_label(label_string) return button def __init__(self): super(Toolbar, self).__init__() #Search button self.search_button = sb = gtk.ToolButton(gtk.STOCK_FIND) self.search_dialog = sdialog = SearchBox self.search_dialog.search.connect("close", self.toggle_searchbox_visibility) self.search_button.connect("clicked", self.toggle_searchbox_visibility) #Previuos-day button self.previousd_button = pdb = gtk.ToolButton(gtk.STOCK_GO_BACK) self.previousd_button.connect("clicked", lambda x: self.emit("previous")) #Jump-to-today button self.home_button = hb = gtk.ToolButton(gtk.STOCK_HOME) self.home_button.connect("clicked", lambda x: self.emit("jump-to-today")) self.home_button.set_sensitive(False) #Next-day button button self.nextd_button = ndb = gtk.ToolButton(gtk.STOCK_GO_FORWARD) self.nextd_button.connect("clicked", lambda x: self.emit("next")) self.nextd_button.set_sensitive(False) sep1 = gtk.SeparatorToolItem() sep2 = gtk.SeparatorToolItem() for item in (sdialog, sb, sep1, ndb, hb, pdb, sep2): self.insert(item, 0) separator = gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) self.insert(separator, -1) def toggle_searchbox_visibility(self, w): result = self.search_dialog.toggle_visibility() if result: self.search_button.hide() else: self.search_button.show() def add_new_view_button(self, button, i=0): self.insert(button, i) button.show() class StockIconButton(gtk.Button): def __init__(self, stock_id, label=None, size=gtk.ICON_SIZE_BUTTON): super(StockIconButton, self).__init__() self.size = size self.set_alignment(0, 0) self.set_relief(gtk.RELIEF_NONE) self.image = gtk.image_new_from_stock(stock_id, size) if not label: self.add(self.image) else: box = gtk.HBox() self.label = gtk.Label(label) box.pack_start(self.image, False, False, 2) box.pack_start(self.label) self.add(box) def set_stock(self, stock_id): self.image.set_from_stock(stock_id, self.size) ####################### # More Information Pane ## class InformationBox(gtk.VBox): """ Holds widgets which display information about a uri obj: the content object to be shown is_molteplicity: bool used to discriminate grouped items from single ones """ obj = None is_molteplicity = False class _ImageDisplay(gtk.Image): """ A display based on GtkImage to display a uri's thumb or icon using GioFile """ def set_content_object(self, obj): if obj: if isinstance(obj, GioFile) and obj.has_preview(): pixbuf = obj.get_thumbnail(size=SIZE_NORMAL, border=3) if pixbuf is None: pixbuf = obj.get_icon(size=64) else: pixbuf = obj.get_icon(size=64) if pixbuf is None: pixbuf = obj.get_actor_pixbuf(size=64) self.set_from_pixbuf(pixbuf) def __init__(self): super(InformationBox, self).__init__() vbox = gtk.VBox() self.box = gtk.Frame() self.label = gtk.Label() self.pathlabel = gtk.Label() self.pathlabel.modify_font(pango.FontDescription("Monospace 7")) self.box_label = gtk.EventBox() self.box_label.add(self.pathlabel) self.box_label.connect("button-press-event", self.on_path_label_clicked) self.box_label.connect("enter-notify-event", self.on_path_label_enter) self.box_label.connect("leave-notify-event", self.on_path_label_leave) self.box_label.connect("realize", self.on_realize_event) labelvbox = gtk.VBox() labelvbox.pack_start(self.label) labelvbox.pack_end(self.box_label) self.pack_start(labelvbox, True, True, 5) self.box.set_shadow_type(gtk.SHADOW_NONE) vbox.pack_start(self.box, True, True) self.pathlabel.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self.label.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self.add(vbox) self.display_widget = self._ImageDisplay() self.box.add(self.display_widget) self.show_all() def set_displaytype(self, obj): """ Determines the ContentDisplay to use for a given uri """ self.display_widget.set_content_object(obj) self.show_all() def set_content_object(self, obj): self.obj = obj self.set_displaytype(obj) text = get_text_or_uri(obj,molteplicity=self.is_molteplicity) self.label.set_markup("" + text + "") path = obj.uri.replace("&", "&").replace("%20", " ") self.is_file = path.startswith("file://") if self.is_file: self.textpath = os.path.dirname(path)[7:] else: if self.is_molteplicity: path = text.split(" ")[-1] #take only the uri self.textpath = path self.pathlabel.set_markup("" + self.textpath + "") def on_realize_event(self, parms): if self.is_file: hand = gtk.gdk.Cursor(gtk.gdk.HAND2) self.box_label.window.set_cursor(hand) def on_path_label_clicked(self, wid, e): if self.is_file: os.system('xdg-open "%s"' % self.textpath) def on_path_label_enter(self, wid, e): if self.is_file: self.pathlabel.set_markup("" + self.textpath+ "") def on_path_label_leave(self, wid, e): if self.is_file: self.pathlabel.set_markup("" + self.textpath + "") class _RelatedPane(gtk.TreeView): """ . . . . . . . . . <--- Related files . . . . . . . Displays related events using a widget based on gtk.TreeView """ def __init__(self, column_name): super(_RelatedPane, self).__init__() self.popupmenu = ContextMenu self.connect("button-press-event", self.on_button_press) self.connect("row-activated", self.row_activated) pcolumn = gtk.TreeViewColumn(_(column_name)) pixbuf_render = gtk.CellRendererPixbuf() pcolumn.pack_start(pixbuf_render, False) pcolumn.set_cell_data_func(pixbuf_render, self.celldatamethod, "pixbuf") text_render = gtk.CellRendererText() text_render.set_property("ellipsize", pango.ELLIPSIZE_MIDDLE) pcolumn.pack_end(text_render, True) pcolumn.set_cell_data_func(text_render, self.celldatamethod, "text") self.append_column(pcolumn) self.set_headers_visible(True) def celldatamethod(self, column, cell, model, iter_, user_data): if model: obj = model.get_value(iter_, 0) if user_data == "text": text = get_text_or_uri(obj) cell.set_property("text", text) elif user_data == "pixbuf": cell.set_property("pixbuf", obj.icon) def _set_model_in_thread(self, structs): """ A threaded which generates pixbufs and emblems for a list of structs. It takes those properties and appends them to the view's model """ lock = threading.Lock() self.active_list = [] liststore = gtk.ListStore(gobject.TYPE_PYOBJECT) self.set_model(liststore) for struct in structs: if not struct.content_object: continue self.active_list.append(False) liststore.append((struct.content_object,)) def set_model_from_list(self, structs): self.last_active = -1 if not structs: self.set_model(None) return thread = threading.Thread(target=self._set_model_in_thread, args=(structs,)) thread.start() def on_button_press(self, widget, event): if event.button == 3: path = self.get_path_at_pos(int(event.x), int(event.y)) if path: model = self.get_model() obj = model[path[0]][0] self.popupmenu.do_popup(event.time, [obj]) return False def row_activated(self, widget, path, col, *args): if path: model = self.get_model() if model: obj = model[path[0]][0] obj.launch() class InformationContainer(gtk.Dialog): """ . . . . . . URI . . Info . . . . Tags . . . . . . . . . . . . . . . <--- Related files . . . . . . . A pane which holds the information pane and related pane """ __gsignals__ = { "content-object-set": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,()), } class _InformationToolbar(gtk.Toolbar): def __init__(self): gtk.Toolbar.__init__(self) self.set_icon_size(gtk.ICON_SIZE_SMALL_TOOLBAR) self.open_button = ob = InformationToolButton(gtk.STOCK_OPEN) ob.set_label(_("Launch this subject")) self.delete_button = del_ = InformationToolButton(gtk.STOCK_DELETE) del_.set_label(_("Delete this subject")) self.pin_button = pin = Toolbar.get_toolbutton( get_icon_path("hicolor/24x24/status/pin.png"), _("Add Pin"),radio=False) self.note_button = note = Toolbar.get_toolbutton( get_icon_path("hicolor/24x24/status/note.png"), _("Edit Note"),radio=False) sep = gtk.SeparatorToolItem() for item in (del_, note, pin, sep, ob): if item: self.insert(item, 0) class _EditNoteWindow(gtk.Window): def __init__(self, parent, obj): gtk.Window.__init__(self) self.obj = obj self.set_title(_("Edit Note")) self.set_transient_for(parent) self.set_destroy_with_parent(True) self.set_size_request(400, 400) self.connect("destroy", self.on_save_note) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) textview = gtk.TextView() self.textbuffer = textview.get_buffer() self.textbuffer.set_text("" if self.obj.annotation is None else self.obj.annotation) sw.add(textview) self.add(sw) self.show_all() def on_save_note(self, *arg): self.obj.annotation = self.textbuffer.get_text(self.textbuffer.get_start_iter (), self.textbuffer.get_end_iter()) def __init__(self, parent=None): super(gtk.Window, self).__init__() if parent: self.set_transient_for(parent) self.set_destroy_with_parent(True) self.set_size_request(400, 400) self.connect("destroy", self.hide_on_delete) box1 = gtk.VBox() box2 = gtk.VBox() vbox = gtk.VBox() self.toolbar = self._InformationToolbar() self.infopane = InformationBox() self.relatedpane = _RelatedPane("Used With") scrolledwindow = gtk.ScrolledWindow() box2.set_border_width(5) box1.pack_start(self.toolbar, False, False) box2.pack_start(self.infopane, False, False, 4) scrolledwindow.set_shadow_type(gtk.SHADOW_IN) scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scrolledwindow.add(self.relatedpane) vbox.pack_end(scrolledwindow, True, True) scrolledwindow.set_size_request(50, 100) box2.pack_end(vbox, True, True, 10) box1.pack_start(box2, True, True) area = self.get_content_area() area.add(box1) def _launch(w): self.obj.launch() self.toolbar.open_button.connect("clicked", _launch) self.toolbar.delete_button.connect("clicked", self.do_delete_events_with_shared_uri) self.toolbar.pin_button.connect("clicked", self.do_toggle_bookmark) self.toolbar.note_button.connect("clicked", self.do_edit_note) self.connect("size-allocate", self.size_allocate) # Remove the close button separator = gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) self.toolbar.insert(separator, -1) def size_allocate(self, widget, allocation): if allocation.height < 400: self.infopane.display_widget.hide() else: self.infopane.display_widget.show() def do_toggle_bookmark(self, *args): uri = unicode(self.obj.uri) if bookmarker.is_bookmarked(uri): bookmarker.unbookmark(uri) else: bookmarker.bookmark(uri) def do_edit_note(self, *args): window = self._EditNoteWindow(self, self.obj) def do_delete_events_with_shared_uri(self, *args): CLIENT.find_event_ids_for_template( Event.new_for_values(subject_uri=self.obj.uri), lambda ids: CLIENT.delete_events(map(int, ids))) self.hide() def set_content_object(self, obj): self.obj = obj if not isinstance(self.obj, GioFile): self.toolbar.note_button.set_sensitive(False) def _callback(events): self.relatedpane.set_model_from_list(events) get_related_events_for_uri(obj.uri, _callback) self.infopane.set_content_object(obj) self.set_title(_("More Information")) self.show() self.emit("content-object-set") def hide_on_delete(self, widget, *args): super(InformationContainer, self).hide_on_delete(widget) return True class MolteplicityInformationContainer(gtk.Dialog): """ . . . . . .Origin . . Info . . . . . . . . . . . . . . . <--- Similar items (same basename) . . . . . . . A pane which holds the information pane and grouped items pane """ def __init__(self, parent=None): super(gtk.Window, self).__init__() if parent: self.set_transient_for(parent) self.set_destroy_with_parent(True) self.set_size_request(400, 400) self.connect("destroy", self.hide_on_delete) box2 = gtk.VBox() vbox = gtk.VBox() self.infopane = InformationBox() self.infopane.is_molteplicity = True self.relatedpane = _RelatedPane("Grouped items") scrolledwindow = gtk.ScrolledWindow() box2.set_border_width(5) box2.pack_start(self.infopane, False, False, 4) scrolledwindow.set_shadow_type(gtk.SHADOW_IN) scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scrolledwindow.add(self.relatedpane) vbox.pack_end(scrolledwindow, True, True) scrolledwindow.set_size_request(50, 100) box2.pack_end(vbox, True, True, 10) area = self.get_content_area() area.add(box2) self.connect("size-allocate", self.size_allocate) def size_allocate(self, widget, allocation): if allocation.height < 400: self.infopane.display_widget.hide() else: self.infopane.display_widget.show() def set_item_list(self, list_): self.infopane.set_content_object(list_[0].content_object) self.relatedpane.set_model_from_list(list_) self.set_title(_("More Information")) self.show() def hide_on_delete(self, widget, *args): super(MolteplicityInformationContainer, self).hide_on_delete(widget) return True class PreferencesDialog(gtk.Dialog): class _PluginTreeView(gtk.TreeView): def __init__(self): gtk.TreeView.__init__(self) self.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_VERTICAL) self.set_headers_visible(False) acolumn = gtk.TreeViewColumn("") toggle_render = gtk.CellRendererToggle() acolumn.pack_start(toggle_render, False) acolumn.add_attribute(toggle_render, "active", 1) self.append_column(acolumn) bcolumn = gtk.TreeViewColumn("") text_render = gtk.CellRendererText() text_render.set_property("ellipsize", pango.ELLIPSIZE_MIDDLE) bcolumn.pack_start(text_render, True) bcolumn.add_attribute(text_render, "markup", 0) self.append_column(bcolumn) self.set_property("rules-hint", True) self.connect("row-activated" , self.on_activate) def set_state(self, entry, state): PluginManager.plugin_settings._gconf.set_bool(entry.key, state) def on_activate(self, widget, path, column): model = self.get_model() model[path][1] = not model[path][1] self.set_state(model[path][2], model[path][1]) bname = os.path.basename(model[path][2].key) if model[path][1]: self.manager.activate(name=bname) else: self.manager.deactivate(name=bname) def set_items(self, manager): entries = manager.plugin_settings._gconf.all_entries(PluginManager.plugin_settings._root) store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_PYOBJECT) for entry in entries: bname = os.path.basename(entry.key) if manager.plugins.has_key(bname): # Load the plugin if the plugin is found module = manager.plugins[bname] name = "" + module.__plugin_name__ + "" desc = "\n" + module.__description__ + "" store.append( [name+desc, False if entry.value is None else entry.value.get_bool(), entry]) else: # Remove the key if no plugin is found manager.plugin_settings._gconf.unset(entry.key) self.manager = manager self.set_model(store) def __init__(self, parent=None): super(PreferencesDialog, self).__init__() if parent: self.set_transient_for(parent) self.set_destroy_with_parent(True) self.set_has_separator(False) self.set_title(_("Preferences")) self.set_size_request(400, 500) area = self.get_content_area() self.notebook = notebook = gtk.Notebook() area.pack_start(notebook) notebook.set_border_width(10) #Plugin page plugbox = gtk.VBox() plugbox.set_border_width(10) self.plug_tree = self._PluginTreeView() label = gtk.Label( _("Active Plugins:")) label.set_alignment(0, 0.5) plugbox.pack_start(label, False, False, 4) scroll_win = gtk.ScrolledWindow() scroll_win.set_shadow_type(gtk.SHADOW_IN) scroll_win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroll_win.add(self.plug_tree) plugbox.add(scroll_win) notebook.append_page(plugbox, gtk.Label( _("Plugins"))) #Configuration page vbox = gtk.VBox() vbox.set_border_width(5) hbox_tray = gtk.HBox() label = gtk.Label(_("Show icon in system tray")) self.check_button = gtk.CheckButton() self.check_button.set_active(settings.get("tray_icon", False)) self.check_button.connect("toggled", self.on_check_toggled) hbox_tray.pack_start(self.check_button,False,False) hbox_tray.pack_start(label, False,False) vbox.pack_start(hbox_tray,False,False) notebook.append_page(vbox, gtk.Label( _("Configuration"))) self.connect("delete-event", lambda *args: (True, self.hide())[0]) close_button = gtk.Button(stock=gtk.STOCK_CLOSE) self.add_action_widget(close_button, gtk.RESPONSE_DELETE_EVENT) close_button.connect("clicked", lambda *args: (True, self.hide())[0]) def on_check_toggled(self, button, *args): settings.set("tray_icon", button.get_active()) #Code adapted from Emesene2 source. Get it at: https://github.com/emesene/emesene #Thanks Emesene's team class NiceBar(gtk.EventBox): '''A class used to display messages in a non-intrusive bar''' NORMALBACKGROUND = gtk.gdk.Color(65025,65025,46155) NORMALFOREGROUND = "black" ALERTBACKGROUND = gtk.gdk.Color(57600,23040,19712) ALERTFOREGROUND = NORMALFOREGROUND def __init__(self, default_background=ALERTBACKGROUND, default_foreground=None): gtk.EventBox.__init__(self) self.message_label = gtk.Label() self.message_label.set_line_wrap(True) self.message_label.set_ellipsize(pango.ELLIPSIZE_END) self.message_image = gtk.Image() self.message_hbox = gtk.HBox() self.message_hbox.set_border_width(2) if default_background is None: default_background = self.NORMALBACKGROUND if default_foreground is None: default_foreground = self.NORMALFOREGROUND self.default_back = default_background self.default_fore = default_foreground self.empty_queue() self.markup = '%s' self.modify_bg(gtk.STATE_NORMAL, default_background) self.message_hbox.pack_end(self.message_label) self.add(self.message_hbox) def new_message(self, message, stock=None, background=None, \ foreground=None): ''' Adds the actual message to the queue and show a new one ''' if self.actual_message != '': self.messages_queue.append([self.actual_message, \ self.actual_image, self.actual_background, self.actual_foreground]) self.display_message(message, stock, background, foreground) def remove_message(self): ''' Removes the actual message and display the next if any ''' try: message, stock, back, fore = self.messages_queue.pop() self.display_message(message, stock, back, fore) except IndexError: self.hide() def display_message(self, message, stock=None, background=None, \ foreground=None): ''' Displays a message without modifying the queue A background, text color and a stock image are optional ''' self.actual_message = message self.actual_image = stock self.actual_background = background or self.default_back self.actual_foreground = foreground or self.default_fore if self.message_image.get_parent() is not None: self.message_hbox.remove(self.message_image) if stock is not None: self.message_image = gtk.image_new_from_stock(stock, \ gtk.ICON_SIZE_LARGE_TOOLBAR) self.message_hbox.pack_start(self.message_image, False, False) self.modify_bg(gtk.STATE_NORMAL, self.actual_background) self.message_label.set_markup(self.markup % (self.actual_foreground, self.actual_message)) self.show_all() def empty_queue(self): ''' Delets all messages and hide the bar ''' self.messages_queue = list() self.actual_message = '' self.actual_image = None self.actual_background = self.default_back self.actual_foreground = self.default_fore self.hide() ### if gst is not None: VideoPreviewTooltip = VideoPreviewTooltip() AudioPreviewTooltip = AudioPreviewTooltip() else: VideoPreviewTooltip = None AudioPreviewTooltip = None StaticPreviewTooltip = StaticPreviewTooltip() ContextMenu = ContextMenu() ContextMenuMolteplicity = ContextMenuMolteplicity() SearchBox = SearchBox() gnome-activity-journal-0.8.0/src/blacklist.py0000644000175000017500000000726111610342115020561 0ustar rainctrainct# -.- coding: utf-8 -.- # # History Manager # # Copyright © 2011 Collabora Ltd. # By Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from itertools import imap from zeitgeist.datamodel import Event, Subject from external import CLIENT, CLIENT_VERSION class OldBlacklistInterface: INCOGNITO = Event.new_for_values() def __init__(self): self._blacklist = CLIENT._iface.get_extension('Blacklist', 'blacklist') def _get_blacklist_templates(self): return map(Event.new_for_struct, self._blacklist.GetBlacklist()) def _add_blacklist_template(self, template): templates = self._get_blacklist_templates() templates.append(template) self._blacklist.SetBlacklist(templates) def _remove_blacklist_template(self, template): templates = self._get_blacklist_templates() updated_templates = list(templates) for template in templates: if self.INCOGNITO.matches_template(template): updated_templates.remove(template) self._blacklist.SetBlacklist(updated_templates) def get_incognito(self): templates = self._get_blacklist_templates() return any(imap(self.INCOGNITO.matches_template, templates)) def toggle_incognito(self): if not self.get_incognito(): self._add_blacklist_template(self.INCOGNITO) else: self._remove_blacklist_template(self.INCOGNITO) class NewBlacklistInterface: INCOGNITO = Event.new_for_values() INCOGNITO_ID = 'block-all' _callback = None def __init__(self): self._blacklist = CLIENT._iface.get_extension('Blacklist', 'blacklist') self._blacklist.connect('TemplateAdded', self._on_notification) self._blacklist.connect('TemplateRemoved', self._on_notification) def set_incognito_toggle_callback(self, callback): self._callback = callback def _on_notification(self, blacklist_id, template): if self.INCOGNITO.matches_template(template): if self._callback is not None: self._callback() def _get_blacklist_templates(self): return self._blacklist.GetTemplates() def _add_blacklist_template(self, template): self._blacklist.AddTemplate(self.INCOGNITO_ID, self.INCOGNITO) def _remove_blacklist_template(self, template_id): # FIXME: This should be changed to something that doesn't depend on # INCOGNITO_ID, but just on the INCOGNITO template. self._blacklist.RemoveTemplate(self.INCOGNITO_ID) self._blacklist.RemoveTemplate('incognito') # for backwards compatibility def get_incognito(self): templates = self._get_blacklist_templates() return any(imap(self.INCOGNITO.matches_template, templates.itervalues())) def toggle_incognito(self): if not self.get_incognito(): self._add_blacklist_template(self.INCOGNITO) else: self._remove_blacklist_template(self.INCOGNITO) if CLIENT_VERSION >= [0, 7, 99]: BLACKLIST = NewBlacklistInterface() else: BLACKLIST = OldBlacklistInterface() gnome-activity-journal-0.8.0/src/Indicator.py0000644000175000017500000001345011610341343020524 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2010 Stefano Candori # Copyright © 2011 Collabora Ltd. # By Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import gtk import os from config import get_icon_path, settings from blacklist import BLACKLIST from common import ignore_exceptions HAS_INDICATOR = True try: import appindicator except ImportError: HAS_INDICATOR = False else: class Indicator(appindicator.Indicator): """ A widget that implements the appindicator for ubuntu """ def __init__(self, main_window): path = get_icon_path("hicolor/scalable/apps/gnome-activity-journal.svg") name = _("Activity Journal") appindicator.Indicator.__init__(self, name, path, \ appindicator.CATEGORY_APPLICATION_STATUS) self.main_window = main_window menu = Menu(self.main_window) self.set_menu(menu) def set_visible(self, bool): if not bool: self.set_status(appindicator.STATUS_PASSIVE) else: self.set_status(appindicator.STATUS_ACTIVE) class TrayIcon(gtk.StatusIcon): """ A widget that implements the tray icon """ def __init__(self, main_window): gtk.StatusIcon.__init__(self) self.main_window = main_window path = get_icon_path("hicolor/scalable/apps/gnome-activity-journal-paused.svg") self.set_from_file(path) self.set_tooltip(_("Activity Journal")) self.connect('activate', self._on_activate) self.connect('popup-menu', self._on_popup) self.menu = Menu(self.main_window, self) def _on_activate(self, trayicon): if(self.main_window.get_property("visible")): self.main_window.hide() else: self.main_window.show() def _on_popup(self, trayicon, button, activate_time): position = None if os.name == 'posix': position = gtk.status_icon_position_menu self.menu.popup(None, None, position, button, activate_time, trayicon) def set_icon(self, paused): if paused: name = "hicolor/scalable/apps/gnome-activity-journal-paused.svg" else: name = "hicolor/scalable/apps/gnome-activity-journal.svg" self.set_from_file(get_icon_path(name)) class Menu(gtk.Menu): """ a widget that represents the menu displayed on the trayicon on the main window """ def __init__(self, main_window, parent=None): gtk.Menu.__init__(self) self.main_window = main_window self._parent = parent self.hide_show_mainwindow = gtk.MenuItem(_('Hide/Show GAJ')) self.hide_show_mainwindow.connect('activate', self._on_activate) self.incognito_enable = gtk.MenuItem(_('Start incognito mode (pause event logging)')) self.incognito_enable.connect('activate', self._toggle_incognito) self.incognito_disable = gtk.MenuItem(_('Resume event logging (exit incognito)')) self.incognito_disable.connect('activate', self._toggle_incognito) self.quit = gtk.ImageMenuItem(gtk.STOCK_QUIT) self.quit.connect('activate', lambda *args: self.main_window.quit_and_save()) self.append(self.hide_show_mainwindow) self.append(self.incognito_enable) self.append(self.incognito_disable) self.append(gtk.SeparatorMenuItem()) self.append(self.quit) self.show_all() BLACKLIST.set_incognito_toggle_callback(self._update_incognito) if self._update_incognito() is None: self.incognito_enable.hide() self.incognito_disable.hide() def _on_activate(self, tray): if(self.main_window != None): if(self.main_window.get_property("visible")): self.main_window.hide() else: self.main_window.show() @ignore_exceptions() def _update_incognito(self): enabled = BLACKLIST.get_incognito() if enabled: self.incognito_enable.hide() self.incognito_disable.show() else: self.incognito_enable.show() self.incognito_disable.hide() if self._parent is not None: self._parent.set_icon(paused=enabled) return enabled @ignore_exceptions() def _toggle_incognito(self, *discard): BLACKLIST.toggle_incognito() class TrayIconManager(): def __init__(self, main_window): self.tray = None self.main_window = main_window if settings.get("tray_icon", False): self._create_tray_icon(self.main_window) settings.connect("tray_icon", self._on_tray_conf_changed) def _create_tray_icon(self, main_window): if HAS_INDICATOR: self.tray = Indicator(main_window) else: self.tray = TrayIcon(main_window) self.tray.set_visible(True) def _on_tray_conf_changed(self, *args): if not settings.get("tray_icon", False): self.tray.set_visible(False) else: if not self.tray: self._create_tray_icon(self.main_window) else: self.tray.set_visible(True) gnome-activity-journal-0.8.0/src/activity_widgets.py0000644000175000017500000020534011610332437022177 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009-2010 Seif Lotfy # Copyright © 2010 Randal Barlow # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Markus Korn # Copyright © 2010 Stefano Candori # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import datetime import gobject import gtk import math import urllib from urlparse import urlparse import pango import threading try: import gst if gst.element_factory_find("playbin2") is None : gst = None except ImportError: gst = None from common import * import content_objects from config import event_exists, settings, bookmarker, SUPPORTED_SOURCES from store import ContentStruct, CLIENT from supporting_widgets import DayLabel, ContextMenu, ContextMenuMolteplicity, StaticPreviewTooltip, VideoPreviewTooltip,\ SearchBox, AudioPreviewTooltip from zeitgeist.datamodel import ResultType, StorageState, TimeRange #DND support variables TYPE_TARGET_TEXT = 80 TYPE_TARGET_URI = 81 class Draggable(): def __init__(self, widget): targets = [("text/plain", 0, TYPE_TARGET_TEXT), ("text/uri-list", 0, TYPE_TARGET_URI)] widget.drag_source_set( gtk.gdk.BUTTON1_MASK, targets, gtk.gdk.ACTION_COPY) widget.connect("drag_data_get", self.on_drag_data_get) class Droppable(): def __init__(self, widget): targets = [("text/plain", 0, TYPE_TARGET_TEXT),] widget.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, targets, gtk.gdk.ACTION_COPY) widget.connect("drag_data_received", self.on_drag_data_received) class _GenericViewWidget(gtk.VBox): day = None day_signal_id = None icon_path = "path to an icon"# get_data_path("relative_path") dsc_text = "Description for toolbutton"# _("Switch to MultiView") def __init__(self): gtk.VBox.__init__(self) self.daylabel = DayLabel() self.pack_start(self.daylabel, False, False) self.connect("style-set", self.change_style) def set_day(self, day, store, force_update=False): self.store = store if self.day: self.day.disconnect(self.day_signal_id) self.day = day self.day_signal_id = self.day.connect("update", self.update_day) self.update_day(day, force_update) def update_day(self, day, force_update=False): self.daylabel.set_date(day.date) self.view.set_day(self.day, force_update) def click(self, widget, event): if event.button in (1, 3): self.emit("unfocus-day") def change_style(self, widget, style): rc_style = self.style color = rc_style.bg[gtk.STATE_NORMAL] color = shade_gdk_color(color, 102/100.0) self.view.modify_bg(gtk.STATE_NORMAL, color) self.view.modify_base(gtk.STATE_NORMAL, color) class MultiViewContainer(gtk.HBox): __gsignals__ = { "view-ready" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,()) } days = [] #TODO Add a configuration field where the user #could choose the number of pages num_pages = 3 day_signal_id = [None] * num_pages day_page_map = {} icon_path = get_data_path("multiview_icon.png") dsc_text = _("Switch to MultiView") def __init__(self): super(MultiViewContainer, self).__init__() self.pages = [] for i in range(self.num_pages): group = DayViewContainer() self.pages.append(group) self.pack_end(group, True, True, 6) def set_day(self, day, store, force_update=False): t = time.time() if self.days: for i, _day in enumerate(self.__days(self.days[0], store)): signal = self.day_signal_id[i] if signal: _day.disconnect(signal) self.days = self.__days(day, store) for i, day in enumerate(self.days): self.day_signal_id[i] = day.connect("update", self.update_day, day) self.update_days() def __days(self, day, store): days = [] for i in range(self.num_pages): days += [day] day = day.previous(store) return days def update_days(self, *args): page_days = set([page.day for page in self.pages]) diff = list(set(self.days).difference(page_days)) i = 0 day_page = {} for page in self.pages: if self.days.count(page.day) > 0: self.reorder_child(page, self.days.index(page.day)) for page in self.pages: if not page.day in self.days: page.set_day(diff[i]) day_page[page.day] = page i += 1 self.reorder_child(page, self.days.index(page.day)) def update_day(self, *args): day = args[1] for page in self.pages: if page.day == day: page.set_day(day) self.emit("view-ready") def set_zoom(self, zoom): pass def set_slider(self, slider): pass def toggle_erase_mode(self): #yeah that'ugly..don't mind: it's only a temp solution global IN_ERASE_MODE IN_ERASE_MODE = not IN_ERASE_MODE #for page in self.pages: # page.in_erase_mode = not page.in_erase_mode class DayViewContainer(gtk.VBox): event_templates = ( Event.new_for_values(interpretation=Interpretation.MODIFY_EVENT.uri), Event.new_for_values(interpretation=Interpretation.CREATE_EVENT.uri), Event.new_for_values(interpretation=Interpretation.ACCESS_EVENT.uri), Event.new_for_values(interpretation=Interpretation.SEND_EVENT.uri), Event.new_for_values(interpretation=Interpretation.RECEIVE_EVENT.uri) ) def __init__(self): super(DayViewContainer, self).__init__() self.daylabel = DayLabel() self.pack_start(self.daylabel, False, False) self.dayviews = [DayView(title) for title in DayParts.get_day_parts()] self.scrolled_window = gtk.ScrolledWindow() self.scrolled_window.set_shadow_type(gtk.SHADOW_NONE) self.vp = viewport = gtk.Viewport() viewport.set_shadow_type(gtk.SHADOW_NONE) self.box = gtk.VBox() for dayview in self.dayviews: self.box.pack_start(dayview, False, False) viewport.add(self.box) self.scrolled_window.add(viewport) self.pack_end(self.scrolled_window, True, True) self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.show_all() self.day = None self.in_erase_mode = False self.connect("style-set", self.change_style) def set_day(self, day): # TODO: Don't duplicate half of the code for each view, use common # base classes and shared interfaces instead! self.day = day if pinbox in self.box.get_children(): self.box.remove(pinbox) if (day.date - datetime.date.today()) == datetime.timedelta(days=0): self.box.pack_start(pinbox, False, False) self.box.reorder_child(pinbox, 0) self.daylabel.set_date(day.date) parts = [[] for i in DayParts.get_day_parts()] uris = [[] for i in parts] list = day.filter(self.event_templates, result_type=ResultType.MostRecentEvents) for item in list: if not item.content_object: continue i = DayParts.get_day_part_for_item(item) uri = item.event.subjects[0].uri interpretation = item.event.interpretation if not uri in uris[i]: uris[i].append(uri) parts[i].append(item) for i, part in enumerate(parts): self.dayviews[i].set_items(part) def change_style(self, this, old_style): style = this.style color = style.bg[gtk.STATE_NORMAL] bgcolor = shade_gdk_color(color, 102/100.0) self.vp.modify_bg(gtk.STATE_NORMAL, bgcolor) class DayView(gtk.VBox): def __init__(self, title=None): super(DayView, self).__init__() # Create the title label if title: self.label = gtk.Label(title) self.label.set_alignment(0.03, 0.5) self.pack_start(self.label, False, False, 6) # Create the main container self.view = None # Connect to relevant signals self.connect("style-set", self.on_style_change) self.show_all() def on_style_change(self, widget, style): """ Update used colors according to the system theme. """ color = self.style.bg[gtk.STATE_NORMAL] fcolor = self.style.fg[gtk.STATE_NORMAL] color = combine_gdk_color(color, fcolor) if hasattr(self, "label"): self.label.modify_fg(gtk.STATE_NORMAL, color) def clear(self): if self.view: if self.view in self.get_children(): self.remove(self.view) self.view.destroy() self.view = gtk.VBox() self.pack_start(self.view) def set_items(self, items): self.clear() categories = {} for struct in items: if not struct.content_object: continue subject = struct.event.subjects[0] interpretation = subject.interpretation if INTERPRETATION_PARENTS.has_key(interpretation): interpretation = INTERPRETATION_PARENTS[interpretation] if struct.event.actor == "application://tomboy.desktop": interpretation = "aj://note" if struct.event.actor == "application://bzr.desktop": interpretation = "aj://vcs" if not categories.has_key(interpretation): categories[interpretation] = [] categories[interpretation].append(struct) if not categories: self.hide_all() else: ungrouped_events = [] for key in sorted(categories.iterkeys()): events = categories[key] if len(events) > 3: box = CategoryBox(key, list(reversed(events))) self.view.pack_start(box) else: ungrouped_events += events box = CategoryBox(None, ungrouped_events) self.view.pack_start(box) self.show_all() class CategoryBox(gtk.HBox): set_up_done = False EXPANDED = {} def _set_up_box(self, event_structs): if not self.set_up_done: self.set_up_done = True for struct in event_structs: if not struct.content_object:continue if self.itemoff > 0: item = Item(struct, self.pinnable, False) else: item = Item(struct, self.pinnable, True) hbox = gtk.HBox () hbox.pack_start(item, True, True, 0 ) self.view.pack_start(hbox, False, False, 0) hbox.show_all() def __init__(self, category, event_structs, pinnable = False, itemoff = 0): super(CategoryBox, self).__init__() self.category = category self.event_structs = event_structs self.pinnable = pinnable self.itemoff = itemoff self.view = gtk.VBox(True) self.vbox = gtk.VBox() SearchBox.connect("search", self.__highlight) SearchBox.connect("clear", self.__clear) if len(event_structs) > 0: d = str(datetime.date.fromtimestamp(int(event_structs[0].event.timestamp)/1000)) \ + " " + str((time.localtime(int(event_structs[0].event.timestamp)/1000).tm_hour)/8) + " " + str(category) if not self.EXPANDED.has_key(d): self.EXPANDED[d] = False # If this isn't a set of ungrouped events, give it a label if category or category == "": # Place the items into a box and simulate left padding self.box = gtk.HBox() self.box.pack_start(self.view) self.hbox = hbox = gtk.HBox() # Add the title button if category in SUPPORTED_SOURCES: text = SUPPORTED_SOURCES[category].group_label(len(event_structs)) else: text = "Unknown" self.label = gtk.Label() self.label.set_markup("%s" % text) #label.set_ellipsize(pango.ELLIPSIZE_END) hbox.pack_start(self.label, False, False, 0) self.label_num = gtk.Label() self.label_num.set_markup("(%d)" % len(event_structs)) self.label_num.set_alignment(1.0,0.5) self.label_num.set_alignment(1.0,0.5) hbox.pack_end(self.label_num, False, False) self.al = gtk.gdk.Rectangle(0,0,0,0) self.i = self.connect_after("size-allocate", self.set_size) hbox.set_border_width(6) self.expander = gtk.Expander() self.expander.set_expanded(self.EXPANDED[d]) if self.EXPANDED[d]: self._set_up_box(event_structs) self.expander.connect_after("activate", self.on_expand, d) self.expander.set_label_widget(hbox) self.vbox.pack_start(self.expander, True, True) self.expander.add(self.box)# self.pack_start(self.vbox, True, True, 24) self.expander.show_all() self.show() hbox.show_all() self.label_num.show_all() self.view.show() self.connect("style-set", self.on_style_change, self.label_num) self.init_multimedia_tooltip() else: self._set_up_box(event_structs) self.box = self.view self.vbox.pack_end(self.box) self.box.show() self.show() self.pack_start(self.vbox, True, True, 16 -itemoff) self.show_all() def on_style_change(self, widget, style, label): """ Update used colors according to the system theme. """ color = self.style.bg[gtk.STATE_NORMAL] fcolor = self.style.fg[gtk.STATE_NORMAL] color = combine_gdk_color(color, fcolor) label.modify_fg(gtk.STATE_NORMAL, color) def set_size(self, widget, allocation): if self.al != allocation: self.al = allocation self.hbox.set_size_request(self.al[2]- 72, -1) def on_expand(self, widget, d): self.EXPANDED[d] = self.expander.get_expanded() self._set_up_box(self.event_structs) def init_multimedia_tooltip(self): """ Show the items cointained in the category allowing to peek into those. """ self.set_property("has-tooltip", True) self.text = "" self.text_title = "" + self.label.get_text() +":\n\n" for struct in self.event_structs[:15]: text = get_text_or_uri(struct.content_object) self.text += "" + u'\u2022' + " " + text + "\n" if len(self.event_structs) > 15: self.text += "..." self.text = self.text.replace("&", "&") self.connect("query-tooltip", self._handle_tooltip_category) def _handle_tooltip_category(self, widget, x, y, keyboard_mode, tooltip): """ Create the tooltip for the categories """ if self.expander.get_expanded(): return False if self.category in SUPPORTED_SOURCES: pix = get_icon_for_name(SUPPORTED_SOURCES[self.category].icon, 32) else: pix = None hbox = gtk.HBox() label_title = gtk.Label() label_title.set_markup(self.text_title) label_text = gtk.Label() label_text.set_markup(self.text) al = gtk.Alignment() #center the label in the middle of the image al.set_padding(32, 0, 10, 0) al.add(label_title) img = gtk.image_new_from_pixbuf(pix) hbox.pack_start(img, False, False) hbox.pack_start(al, False, False) vbox = gtk.VBox() al = gtk.Alignment(0.5, 0.5, 0, 0) #align the title in the center al.add(hbox) vbox.pack_start(al) al = gtk.Alignment() #align to the right al.add(label_text) vbox.pack_start(al) vbox.show_all() tooltip.set_custom(vbox) return True def __highlight(self,*args): matches = False if self.category: for struct in self.event_structs: if struct.content_object.matches_search: text = self.label.get_text() self.label.set_markup("" + text + "") color = self.style.base[gtk.STATE_SELECTED] self.label.modify_fg(gtk.STATE_NORMAL, color) num = self.label_num.get_text() self.label_num.set_markup("" + num + "") self.label_num.modify_fg(gtk.STATE_NORMAL, color) matches = True break if not matches: self.__clear() def __clear(self, *args): if self.category: self.label.set_markup("" + self.label.get_text() + "") color = self.style.text[gtk.STATE_NORMAL] self.label.modify_fg(gtk.STATE_NORMAL, color) self.label_num.set_markup("" + self.label_num.get_text() + "") color = self.style.bg[gtk.STATE_NORMAL] fcolor = self.style.fg[gtk.STATE_NORMAL] color = combine_gdk_color(color, fcolor) self.label_num.modify_fg(gtk.STATE_NORMAL, color) class Item(gtk.HBox, Draggable): def __init__(self, content_struct, allow_pin = False, do_style=True): event = content_struct.event gtk.HBox.__init__(self) self.set_border_width(2) self.allow_pin = allow_pin self.btn = gtk.Button() Draggable.__init__(self, self.btn) self.search_results = [] self.subject = event.subjects[0] self.content_obj = content_struct.content_object self.time = float(event.timestamp) / 1000 self.time = time.strftime("%H:%M", time.localtime(self.time)) if self.content_obj is not None: if self.subject.uri.startswith("http"): self.icon = self.content_obj.get_actor_pixbuf(24) else: self.icon = self.content_obj.get_icon( can_thumb=settings.get('small_thumbnails', False), border=0) else: self.icon = None self.btn.set_relief(gtk.RELIEF_NONE) self.btn.set_focus_on_click(False) self.__init_widget() self.show_all() self.o_style = None self.markup = None self.last_launch = 0 self.__highlight() SearchBox.connect("search", self.__highlight) SearchBox.connect("clear", self.__clear) if do_style: self.connect("style-set", self.change_style) def change_style(self, widget, style): rc_style = self.style color = rc_style.bg[gtk.STATE_NORMAL] color = shade_gdk_color(color, 102/100.0) for w in self: w.modify_bg(gtk.STATE_NORMAL, color) def __highlight(self, *args): if not self.o_style: self.o_style = self.style.copy() rc_style = self.o_style.copy() text = self.content_obj.text.replace("&", "&") if text.strip() == "": text = self.content_obj.uri.replace("&", "&") if self.content_obj.matches_search: self.label.set_markup("" + text + "") color = rc_style.base[gtk.STATE_SELECTED] self.label.modify_fg(gtk.STATE_NORMAL, color) else: self.label.set_markup("" + text + "") color = rc_style.text[gtk.STATE_NORMAL] self.label.modify_fg(gtk.STATE_NORMAL, color) def __clear(self, *args): self.content_obj.matches_search = False text = self.content_obj.text.replace("&", "&") if text.strip() == "": text = self.content_obj.uri.replace("&", "&") rc_style = self.o_style self.label.set_markup("" + text + "") color = rc_style.text[gtk.STATE_NORMAL] self.label.modify_fg(gtk.STATE_NORMAL, color) def __init_widget(self): self.label = gtk.Label() text = self.content_obj.text.replace("&", "&") text.strip() if self.content_obj.text.strip() == "": text = self.content_obj.uri.replace("&", "&") self.label.set_markup(text) self.label.set_ellipsize(pango.ELLIPSIZE_END) self.label.set_alignment(0.0, 0.5) if self.icon: img = gtk.image_new_from_pixbuf(self.icon) else: img = None hbox = gtk.HBox() if img: hbox.pack_start(img, False, False, 1) hbox.pack_start(self.label, True, True, 4) if self.allow_pin: # TODO: get the name "pin" from theme when icons are properly installed img = gtk.image_new_from_file(get_icon_path("hicolor/24x24/status/pin.png")) self.pin = gtk.Button() self.pin.add(img) self.pin.set_tooltip_text(_("Remove Pin")) self.pin.set_focus_on_click(False) self.pin.set_relief(gtk.RELIEF_NONE) self.pack_end(self.pin, False, False) self.pin.connect("clicked", lambda x: self.set_bookmarked(False)) evbox = gtk.EventBox() self.btn.add(hbox) evbox.add(self.btn) self.pack_start(evbox) self.btn.connect("clicked", self.launch) self.btn.connect("enter", self._on_button_entered) self.btn.connect("button_press_event", self._show_item_popup) self.btn.connect("realize", self.realize_cb, evbox) self.init_multimedia_tooltip() def on_drag_data_get(self, treeview, context, selection, target_id, etime): uri = self.content_obj.uri if target_id == TYPE_TARGET_TEXT: selection.set_text(uri, -1) elif target_id == TYPE_TARGET_URI: if uri.startswith("file://"): unquoted_uri = urllib.unquote(uri) if os.path.exists(unquoted_uri[7:]): selection.set_uris([uri]) def realize_cb(self, widget, evbox): evbox.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2)) def init_multimedia_tooltip(self): """ Add multimedia tooltip to multimedia files. Multimedia tooltip is shown for all images, all videos and pdfs A generic tooltip with text and uri is showed for non-GioFile items. Audio files have a preview, too. TODO: make loading of multimedia thumbs async """ self.set_property("has-tooltip", True) if isinstance(self.content_obj, GioFile) and self.content_obj.has_preview(): icon_names = self.content_obj.icon_names if "video-x-generic" in icon_names and gst is not None: self.connect("query-tooltip", self._handle_tooltip_dynamic) self.set_tooltip_window(VideoPreviewTooltip) elif "audio-x-generic" in icon_names and gst is not None: self.connect("query-tooltip", self._handle_tooltip_dynamic) self.set_tooltip_window(AudioPreviewTooltip) else: self.connect("query-tooltip", self._handle_tooltip_static) else: self.connect("query-tooltip", self._handle_tooltip_generic) def _handle_tooltip_generic(self, widget, x, y, keyboard_mode, tooltip): """ Create the tooltip for non-GioFile events """ text = "" + self.label.get_text() + "\n" if isinstance(self.content_obj, GioFile) and \ self.content_obj.annotation is not None: if self.content_obj.annotation.strip() != "": note = _("Notes") note_text = "%s: %s" % (note, self.content_obj.annotation) text += note_text + "\n" uri = urllib.unquote(self.content_obj.uri) if len(uri) > 90: uri = uri[:90] + "..." #ellipsize--it's ugly! if uri.startswith("file://"): text += unicode(uri[7:]) else: text += unicode(uri) text = text.replace("&", "&") tooltip.set_markup(text) tooltip.set_icon(self.icon) return True def _handle_tooltip_static(self, widget, x, y, keyboard_mode, tooltip): """ Create the tooltip for static GioFile events (documents,pdfs,...) """ gio_file = self.content_obj if not isinstance(gio_file, GioFile): return False pixbuf = gio_file.get_thumbnail(size=SIZE_LARGE, border=1) text = _("Name: ") + self.label.get_text() uri = urllib.unquote(self.content_obj.uri) descr = gio.content_type_from_mime_type(self.content_obj.mime_type) descr = gio.content_type_get_description(descr) mime_text = _("\nMIME Type: %s (%s)")% (descr, self.content_obj.mime_type) text += mime_text + "\n" if self.content_obj.annotation is not None: if self.content_obj.annotation.strip() != "": note = _("Notes") note_text = "%s: %s" % (note, self.content_obj.annotation) text += note_text + "\n" truncate_lenght = max(len(mime_text), len(note_text)) else: truncate_lenght = len(mime_text) else: truncate_lenght = len(mime_text) text += "\n" if uri.startswith("file://"): uri = self.truncate_string(uri[7:], truncate_lenght) text += unicode(uri) else: uri = self.truncate_string(uri, truncate_lenght) text += unicode(uri) text = text.replace("&", "&") label = gtk.Label() label.set_markup(text) tooltip.set_custom(label) tooltip.set_icon(pixbuf) return True def _handle_tooltip_dynamic(self, widget, x, y, keyboard_mode, tooltip): """ Create the tooltip for dynamic GioFile events (audio,video) """ tooltip_window = self.get_tooltip_window() return tooltip_window.preview(self.content_obj) def truncate_string(self, string, truncate_lenght): """ Very simple recursive function that truncates strings in a nicely way """ delta = 8 if len(string) <= (truncate_lenght + delta) : return string else: i = string.find(os.path.sep, truncate_lenght - delta*2, truncate_lenght + delta*2) if i > 0: truncate_lenght_new = i + 1 else: truncate_lenght_new = truncate_lenght t_string = string[:truncate_lenght_new] t_string += "\n" + self.truncate_string(string[truncate_lenght_new:], truncate_lenght) return t_string def _on_button_entered(self, widget, *args): global IN_ERASE_MODE if IN_ERASE_MODE: hand = gtk.gdk.Cursor(gtk.gdk.PIRATE) else: hand = gtk.gdk.Cursor(gtk.gdk.ARROW) widget.window.set_cursor(hand) def _show_item_popup(self, widget, ev): global IN_ERASE_MODE if ev.button == 3 and not IN_ERASE_MODE: items = [self.content_obj] ContextMenu.do_popup(ev.time, items) def set_bookmarked(self, bool_): uri = unicode(self.subject.uri) bookmarker.bookmark(uri) if bool_ else bookmarker.unbookmark(uri) if not bool_: self.destroy() def launch(self, *discard): global IN_ERASE_MODE if IN_ERASE_MODE: ContextMenu.do_delete_object(self.content_obj) else: ev_time = time.time() #1 sec it's a good range imo... launch = True if (ev_time - self.last_launch)*1000 > 1000 else False if self.content_obj is not None and launch: self.last_launch = ev_time self.content_obj.launch() ##################### ## ThumbView code ##################### class ThumbViewContainer(_GenericViewWidget): icon_path = get_data_path("thumbview_icon.png") dsc_text = _("Switch to ThumbView") def __init__(self): _GenericViewWidget.__init__(self) self.scrolledwindow = gtk.ScrolledWindow() self.scrolledwindow.set_shadow_type(gtk.SHADOW_NONE) self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.view = ThumbView() self.scrolledwindow.add_with_viewport(self.view) self.scrolledwindow.get_children()[0].set_shadow_type(gtk.SHADOW_NONE) self.pack_end(self.scrolledwindow) self.show_all() def set_zoom(self, zoom): self.view.set_zoom(zoom) def set_slider(self, slider): self.view.set_slider(slider) def toggle_erase_mode(self): self.view.toggle_erase_mode() class _ThumbViewRenderer(gtk.GenericCellRenderer): """ A IconView renderer to be added to a cellayout. It displays a pixbuf and data based on the event property """ __gtype_name__ = "_ThumbViewRenderer" __gproperties__ = { "content_obj" : (gobject.TYPE_PYOBJECT, "event to be displayed", "event to be displayed", gobject.PARAM_READWRITE, ), "size_w" : (gobject.TYPE_INT, "Width of cell", "Width of cell", 48, 256, 96, gobject.PARAM_READWRITE, ), "size_h" : (gobject.TYPE_INT, "Height of cell", "Height of cell", 36, 192, 72, gobject.PARAM_READWRITE, ), "text_size" : (gobject.TYPE_STRING, "Size of the text", "Size of the text", "", gobject.PARAM_READWRITE, ), "molteplicity" : (gobject.TYPE_INT, "Molteplicity", "Number of similar item that are grouped into one", 0, 999, 0, gobject.PARAM_READWRITE, ) } properties = {} @property def width(self): return self.get_property("size_w") @property def height(self): return self.get_property("size_h") @property def text_size(self): return self.get_property("text_size") @property def content_obj(self): return self.get_property("content_obj") @property def molteplicity(self): return self.get_property("molteplicity") @property def emblems(self): return self.content_obj.emblems @property def pixbuf(self): return self.content_obj.get_thumbview_pixbuf_for_size(self.width, self.height) @property def event(self): return self.content_obj.event def __init__(self): super(_ThumbViewRenderer, self).__init__() self.properties = {} self.set_property("mode", gtk.CELL_RENDERER_MODE_ACTIVATABLE) def do_set_property(self, pspec, value): self.properties[pspec.name] = value def do_get_property(self, pspec): return self.properties[pspec.name] def on_get_size(self, widget, area): w = self.width h = self.height return (0, 0, w, h) def on_render(self, window, widget, background_area, cell_area, expose_area, flags): """ The primary rendering function. It calls either the classes rendering functions or special one defined in the rendering_functions dict """ x = cell_area.x y = cell_area.y w = cell_area.width h = cell_area.height pixbuf, isthumb = self.pixbuf if pixbuf and isthumb and "audio-x-generic" not in self.content_obj.icon_names: render_pixbuf(window, x, y, pixbuf, w, h) else: self.file_render_pixbuf(window, widget, pixbuf, x, y, w , h) render_emblems(window, x, y, w, h, self.emblems) path = widget.get_path_at_pos(cell_area.x, cell_area.y) if path != None: try: if widget.active_list[path[0]]: gobject.timeout_add(2, self.render_info_box, window, widget, cell_area, expose_area, self.event, self.content_obj, self.molteplicity) except Exception: pass return True @staticmethod def insert_file_markup(text, size): text = text.replace("&", "&") text = "" + text + "" return text def file_render_pixbuf(self, window, widget, pixbuf, x, y, w, h): """ Renders a icon and file name for non-thumb objects """ context = window.cairo_create() if w == SIZE_THUMBVIEW[0][0]: pixbuf = None if pixbuf: imgw, imgh = pixbuf.get_width(), pixbuf.get_height() ix = x + (self.width - imgw ) iy = y + (self.height - imgh) context.rectangle(x, y, w, h) context.set_source_rgb(1, 1, 1) context.fill_preserve() if pixbuf: context.set_source_pixbuf(pixbuf, ix, iy) context.fill() draw_frame(context, x, y, w, h) context = window.cairo_create() if self.molteplicity > 1: text_ = get_text_or_uri(self.content_obj, molteplicity=True) text_ = text_.split(" ")[-1] else: text_ = self.content_obj.thumbview_text text = self.insert_file_markup(text_, self.text_size) layout = widget.create_pango_layout(text) draw_text(context, layout, text, x+5, y+5, self.width-10) if self.molteplicity > 1: render_molteplicity(window, x, y, w, h, self.molteplicity) @staticmethod def render_info_box(window, widget, cell_area, expose_area, event, content_obj, molteplicity): """ Renders a info box when the item is active """ x = cell_area.x y = cell_area.y - 10 w = cell_area.width h = cell_area.height context = window.cairo_create() t0 = get_event_typename(event) if molteplicity > 1: t1 = get_text_or_uri(content_obj, molteplicity=True) else: t1 = event.subjects[0].text text = ("%s\n%s" % (t0, t1)).replace("&", "&") layout = widget.create_pango_layout(text) layout.set_markup(text) textw, texth = layout.get_pixel_size() popuph = max(h/3 + 5, texth) nw = w + 26 x = x - (nw - w)/2 width, height = window.get_geometry()[2:4] popupy = min(y+h+10, height-popuph-5-1) - 5 draw_speech_bubble(context, layout, x, popupy, nw, popuph) context.fill() return False def on_start_editing(self, event, widget, path, background_area, cell_area, flags): pass def on_activate(self, event, widget, path, background_area, cell_area, flags): pass class ThumbIconView(gtk.IconView, Draggable): """ A iconview which uses a custom cellrenderer to render square pixbufs based on zeitgeist events """ last_active = -1 child_width = _ThumbViewRenderer.width child_height = _ThumbViewRenderer.height def __init__(self): gtk.IconView.__init__(self) Draggable.__init__(self, self) self.active_list = [] self.current_size_index = 1 self.in_erase_mode = False self.popupmenu = ContextMenu self.popupmenu_molteplicity = ContextMenuMolteplicity # Model fields # 1) content object # 2) preview width # 3) preview height # 4) text dimension # 5) number of similar items grouped into one # (show the molteplicity number in the top-right corner) self.model = gtk.ListStore(gobject.TYPE_PYOBJECT, int, int, str, int) self.set_model(self.model) self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.connect("button-press-event", self.on_button_press) self.connect("button-release-event", self.on_button_release) self.connect("motion-notify-event", self.on_motion_notify) self.connect("leave-notify-event", self.on_leave_notify) self.set_selection_mode(gtk.SELECTION_SINGLE) self.set_column_spacing(6) self.set_row_spacing(6) render = _ThumbViewRenderer() self.pack_end(render) self.add_attribute(render, "content_obj", 0) self.add_attribute(render, "size_w", 1) self.add_attribute(render, "size_h", 2) self.add_attribute(render, "text_size", 3) self.add_attribute(render, "molteplicity", 4) self.set_margin(10) SearchBox.connect("search", lambda *args: self.queue_draw()) SearchBox.connect("clear", lambda *args: self.queue_draw()) def _set_model_in_thread(self, items, grouped_items): """ A threaded which generates pixbufs and emblems for a list of events. It takes those properties and appends them to the view's model """ lock = threading.Lock() self.active_list = [] self.grouped_items = grouped_items self.model.clear() for item in items: obj = item.content_object if not obj: continue gtk.gdk.threads_enter() lock.acquire() self.active_list.append(False) self.model.append([obj, SIZE_THUMBVIEW[self.current_size_index][0], SIZE_THUMBVIEW[self.current_size_index][1], SIZE_TEXT_THUMBVIEW[self.current_size_index], 0]) lock.release() gtk.gdk.threads_leave() for item in grouped_items.values(): #i take the first element in the list obj = item[0].content_object if not obj: continue gtk.gdk.threads_enter() lock.acquire() self.active_list.append(False) self.model.append([obj, SIZE_THUMBVIEW[self.current_size_index][0], SIZE_THUMBVIEW[self.current_size_index][1], SIZE_TEXT_THUMBVIEW[self.current_size_index], len(item)]) lock.release() gtk.gdk.threads_leave() def set_model_from_list(self, items, grouped_items): """ Sets creates/sets a model from a list of zeitgeist events :param events: a list of :class:`Events ` """ self.last_active = -1 if not (items or grouped_items): return thread = threading.Thread(target=self._set_model_in_thread, args=(items, grouped_items)) thread.start() def set_zoom(self, size_index): self.current_size_index = size_index for row in self.model: row[1] = SIZE_THUMBVIEW[size_index][0] row[2] = SIZE_THUMBVIEW[size_index][1] row[3] = SIZE_TEXT_THUMBVIEW[size_index] self.queue_draw() def on_drag_data_get(self, iconview, context, selection, target_id, etime): model = iconview.get_model() selected = iconview.get_selected_items() content_object = model[selected[0]][0] uri = content_object.uri if target_id == TYPE_TARGET_TEXT: selection.set_text(uri, -1) elif target_id == TYPE_TARGET_URI: if uri.startswith("file://"): unquoted_uri = urllib.unquote(uri) if os.path.exists(unquoted_uri[7:]): selection.set_uris([uri]) def on_button_press(self, widget, event): if event.button == 3 and not self.in_erase_mode: val = self.get_item_at_pos(int(event.x), int(event.y)) if val: path, cell = val model = self.get_model() obj = model[path[0]][0] if model[path[0]][4] > 1: key = urlparse(obj.uri).netloc if key in self.grouped_items.keys(): list_ = self.grouped_items[key] self.popupmenu_molteplicity.do_popup(event.time, list_) else: self.popupmenu.do_popup(event.time, [obj]) def on_button_release(self, widget, event): if event.button == 1: val = self.get_item_at_pos(int(event.x), int(event.y)) if val: path, cell = val model = self.get_model() obj = model[path[0]][0] if model[path[0]][4] > 1: key = urlparse(obj.uri).netloc if key in self.grouped_items.keys(): list_ = self.grouped_items[key] if self.in_erase_mode: model.remove(model[path[0]].iter) self.popupmenu_molteplicity.do_delete_list(list_) else: self.popupmenu_molteplicity.do_show_molteplicity_list(list_) else: if self.in_erase_mode: model.remove(model[path[0]].iter) self.popupmenu.do_delete_object(obj) else: obj.launch() def on_leave_notify(self, widget, event): try: self.active_list[self.last_active] = False except IndexError:pass self.last_active = -1 self.queue_draw() def on_motion_notify(self, widget, event): val = self.get_item_at_pos(int(event.x), int(event.y)) if val: path, cell = val if path[0] != self.last_active: self.active_list[self.last_active] = False self.active_list[path[0]] = True self.last_active = path[0] self.queue_draw() def query_tooltip(self, widget, x, y, keyboard_mode, tooltip): """ Displays a tooltip based on x, y """ path = self.get_path_at_pos(int(x), int(y)) if path: model = self.get_model() uri = model[path[0]][3].uri interpretation = model[path[0]][3].subjects[0].interpretation tooltip_window = widget.get_tooltip_window() if interpretation == Interpretation.VIDEO.uri: self.set_tooltip_window(VideoPreviewTooltip) else: self.set_tooltip_window(StaticPreviewTooltip) gio_file = content_objects.GioFile.create(uri) return tooltip_window.preview(gio_file) return False class ThumbView(gtk.VBox): """ A container for three image views representing periods in time """ event_templates = ( Event.new_for_values(interpretation=Interpretation.MODIFY_EVENT.uri), Event.new_for_values(interpretation=Interpretation.CREATE_EVENT.uri), Event.new_for_values(interpretation=Interpretation.ACCESS_EVENT.uri), Event.new_for_values(interpretation=Interpretation.SEND_EVENT.uri), Event.new_for_values(interpretation=Interpretation.RECEIVE_EVENT.uri), ) def __init__(self): """Woo""" gtk.VBox.__init__(self) self.views = [] self.labels = [] self.current_size_index = 1 self.zoom_slider = None self.old_date = None for text in DayParts.get_day_parts(): label = gtk.Label() label.set_markup("\n %s" % (text)) label.set_justify(gtk.JUSTIFY_RIGHT) label.set_alignment(0, 0) self.views.append(ThumbIconView()) self.labels.append(label) self.pack_start(label, False, False) self.pack_start(self.views[-1], False, False) self.add_events(gtk.gdk.SCROLL_MASK) self.connect("scroll-event", self.on_scroll_event) self.connect("style-set", self.change_style) def set_phase_items(self, i, items, grouped_items): """ Set a time phases events :param i: a index for the three items in self.views. 0:Morning,1:AfterNoon,2:Evening :param events: a list of :class:`Events ` """ view = self.views[i] label = self.labels[i] if (not items or len(items) == 0) and \ (not grouped_items or len(grouped_items) == 0): view.hide_all() label.hide_all() return False view.show_all() label.show_all() view.set_model_from_list(items, grouped_items) def set_day(self, day, force_update=False): if not force_update and self.old_date is not None: if (day.date - self.old_date) == datetime.timedelta(days=0) and \ self.views[0].in_erase_mode: #don't update the model when we are in ERASE_MODE return self.old_date = day.date parts = [[] for i in DayParts.get_day_parts()] uris = [[] for i in parts] grouped_items = [{} for i in parts] list = day.filter(self.event_templates, result_type=ResultType.MostRecentEvents) for item in list: if event_exists(item.event.subjects[0].uri): i = DayParts.get_day_part_for_item(item) uri = item.event.subjects[0].uri if not uri in uris[i]: if item.content_object: if item.content_object.molteplicity: origin = urlparse(uri).netloc if origin not in grouped_items[i].keys(): grouped_items[i][origin] = [item,] else: grouped_items[i][origin].append(item) uris[i].append(uri) continue uris[i].append(uri) parts[i].append(item) for i, part in enumerate(parts): self.set_phase_items(i, part, grouped_items[i]) def set_zoom(self, zoom): if zoom > len(SIZE_THUMBVIEW) - 1 or zoom < 0: return self.current_size_index = zoom for i in range(0, len(DayParts.get_day_parts())): self.views[i].set_zoom(zoom) def change_style(self, widget, style): rc_style = self.style parent = self.get_parent() if parent: parent = self.get_parent() color = rc_style.bg[gtk.STATE_NORMAL] parent.modify_bg(gtk.STATE_NORMAL, color) for view in self.views: view.modify_base(gtk.STATE_NORMAL, color) color = rc_style.text[4] color = shade_gdk_color(color, 0.95) for label in self.labels: label.modify_fg(0, color) def on_scroll_event(self, widget, event): if event.state == gtk.gdk.CONTROL_MASK: if event.direction == gtk.gdk.SCROLL_UP: self.zoom_slider.set_value(self.current_size_index + 1) elif event.direction == gtk.gdk.SCROLL_DOWN: self.zoom_slider.set_value(self.current_size_index - 1) return True def set_slider(self, slider): self.zoom_slider = slider def toggle_erase_mode(self): for view in self.views: view.in_erase_mode = not view.in_erase_mode class TimelineViewContainer(_GenericViewWidget): icon_path = get_data_path("timelineview_icon.png") dsc_text = _("Switch to TimelineView") def __init__(self): _GenericViewWidget.__init__(self) self.ruler = _TimelineHeader() self.scrolledwindow = gtk.ScrolledWindow() self.scrolledwindow.set_shadow_type(gtk.SHADOW_NONE) self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.view = TimelineView() self.scrolledwindow.add(self.view) self.pack_end(self.scrolledwindow) self.pack_end(self.ruler, False, False) self.view.set_events(gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK) def change_style(self, widget, style): _GenericViewWidget.change_style(self, widget, style) rc_style = self.style color = rc_style.bg[gtk.STATE_NORMAL] color = shade_gdk_color(color, 102/100.0) self.ruler.modify_bg(gtk.STATE_NORMAL, color) def set_zoom(self, zoom): self.view.set_zoom(zoom) def set_slider(self, slider): self.view.set_slider(slider) def toggle_erase_mode(self): self.view.toggle_erase_mode() class _TimelineRenderer(gtk.GenericCellRenderer): """ Renders timeline columns, and text for a for properties """ __gtype_name__ = "TimelineRenderer" __gproperties__ = { "content_obj" : (gobject.TYPE_PYOBJECT, "event to be displayed", "event to be displayed", gobject.PARAM_READWRITE, ), "size_w" : (gobject.TYPE_INT, "Width of cell", "Width of cell", 16, 128, 32, gobject.PARAM_READWRITE, ), "size_h" : (gobject.TYPE_INT, "Height of cell", "Height of cell", 12, 96, 24, gobject.PARAM_READWRITE, ), "text_size" : (gobject.TYPE_STRING, "Size of the text", "Size of the text", "", gobject.PARAM_READWRITE, ), } barsize = 5 properties = {} textcolor = {gtk.STATE_NORMAL : ("#ff", "#ff"), gtk.STATE_SELECTED : ("#ff", "#ff")} @property def content_obj(self): return self.get_property("content_obj") @property def width(self): return self.get_property("size_w") @property def height(self): return self.get_property("size_h") @property def text_size(self): return self.get_property("text_size") @property def phases(self): return self.content_obj.phases @property def event(self): return self.content_obj.event @property def colors(self): """ A tuple of two colors, the first being the base the outer being the outline""" return self.content_obj.type_color_representation @property def text(self): return self.content_obj.timelineview_text @property def pixbuf(self): return self.content_obj.get_icon(self.height) def __init__(self): super(_TimelineRenderer, self).__init__() self.properties = {} self.set_property("mode", gtk.CELL_RENDERER_MODE_ACTIVATABLE) def do_set_property(self, pspec, value): self.properties[pspec.name] = value def do_get_property(self, pspec): return self.properties[pspec.name] def on_get_size(self, widget, area): w = self.width h = self.height + self.barsize*2 + 10 return (0, 0, w, h) def on_render(self, window, widget, background_area, cell_area, expose_area, flags): """ The primary rendering function. It calls either the classes rendering functions or special one defined in the rendering_functions dict """ x = int(cell_area.x) y = int(cell_area.y) w = int(cell_area.width) h = int(cell_area.height) self.render_phases(window, widget, x, y, w, h, flags) return True def render_phases(self, window, widget, x, y, w, h, flags): context = window.cairo_create() phases = self.phases for start, end in phases: context.set_source_rgb(*self.colors[0]) start = int(start * w) end = max(int(end * w), 8) if start + 8 > w: start = w - 8 context.rectangle(x+ start, y, end, self.barsize) context.fill() context.set_source_rgb(*self.colors[1]) context.set_line_width(1) context.rectangle(x + start+0.5, y+0.5, end, self.barsize) context.stroke() x = int(phases[0][0]*w) # Pixbuf related junk which is really dirty self.render_text_with_pixbuf(window, widget, x, y, w, h, flags) return True def render_text_with_pixbuf(self, window, widget, x, y, w, h, flags): uri = self.content_obj.uri imgw, imgh = self.pixbuf.get_width(), self.pixbuf.get_height() x = max(x + imgw/2 + 4, 0 + imgw + 4) x, y = self.render_text(window, widget, x, y, w, h, flags) x -= imgw + 4 y += self.barsize + 3 pixbuf_w = self.pixbuf.get_width() if self.pixbuf else 0 pixbuf_h = self.pixbuf.get_height() if self.pixbuf else 0 if (pixbuf_w, pixbuf_h) == content_objects.SIZE_TIMELINEVIEW: drawframe = True else: drawframe = False render_pixbuf(window, x, y, self.pixbuf, w, h, drawframe=drawframe) def render_text(self, window, widget, x, y, w, h, flags): w = window.get_geometry()[2] y += 2 x += 5 state = gtk.STATE_SELECTED if gtk.CELL_RENDERER_SELECTED & flags else gtk.STATE_NORMAL color1, color2 = self.textcolor[state] text = self._make_timelineview_text(self.text, color1.to_string(), color2.to_string(), self.text_size) layout = widget.create_pango_layout("") layout.set_markup(text) textw, texth = layout.get_pixel_size() if textw + x > w: layout.set_ellipsize(pango.ELLIPSIZE_END) layout.set_width(200*1024) textw, texth = layout.get_pixel_size() if x + textw > w: x = w - textw context = window.cairo_create() pcontext = pangocairo.CairoContext(context) pcontext.set_source_rgb(0, 0, 0) pcontext.move_to(x, y + self.barsize) pcontext.show_layout(layout) return x, y @staticmethod def _make_timelineview_text(text, color1, color2, size): """ :returns: a string of text markup used in timeline widget and elsewhere """ text = text.split("\n") if len(text) > 1: p1, p2 = text[0], text[1] else: p1, p2 = text[0], " " t1 = "" + p1 + "" t2 = "" + p2 + " " if size == 'small' or t2 == "": return (str(t1)).replace("&", "&") return (str(t1) + "\n" + str(t2) + "").replace("&", "&") def on_start_editing(self, event, widget, path, background_area, cell_area, flags): pass def on_activate(self, event, widget, path, background_area, cell_area, flags): pass class TimelineView(gtk.TreeView, Draggable): child_width = _TimelineRenderer.width child_height = _TimelineRenderer.height @staticmethod def make_area_from_event(timestamp, duration): """ Generates a time box based on a objects timestamp and duration over 1. Multiply the results by the width to get usable positions :param timestamp: a timestamp int or string from which to calulate the start position :param duration: the length to calulate the width """ w = max(duration/3600.0/1000.0/24.0, 0) x = ((int(timestamp)/1000.0 - time.timezone)%86400)/3600/24.0 return [x, w] def __init__(self): gtk.TreeView.__init__(self) Draggable.__init__(self, self) self.model = gtk.ListStore(gobject.TYPE_PYOBJECT, int, int, str) self.set_model(self.model) self.popupmenu = ContextMenu self.zoom_slider = None self.in_erase_mode = False self.old_date = None self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.SCROLL_MASK ) self.connect("button-press-event", self.on_button_press) self.connect("button-release-event", self.on_button_release) self.connect("row-activated" , self.on_activate) self.connect("style-set", self.change_style) self.connect("drag-begin", self.on_drag_begin) self.connect("drag-end", self.on_drag_end) self.connect("scroll-event", self.on_scroll_event) pcolumn = gtk.TreeViewColumn("Timeline") self.render = render = _TimelineRenderer() pcolumn.pack_start(render) self.append_column(pcolumn) pcolumn.add_attribute(render, "content_obj", 0) pcolumn.add_attribute(render, "size_w", 1) pcolumn.add_attribute(render, "size_h", 2) pcolumn.add_attribute(render, "text_size", 3) self.set_headers_visible(False) self.set_property("has-tooltip", True) self.set_tooltip_window(StaticPreviewTooltip) SearchBox.connect("search", lambda *args: self.queue_draw()) SearchBox.connect("clear", lambda *args: self.queue_draw()) self.on_drag = False self.current_size_index = 1 def set_model_from_list(self, items): """ Sets creates/sets a model from a list of zeitgeist events :param events: a list of :class:`Events ` """ if not items: return self.model.clear() for row in items: #take the last and more updated content_obj item = row[len(row)-1][0] obj = item.content_object if not obj: continue obj.phases = [self.make_area_from_event(item.event.timestamp, stop) for (item, stop) in row] obj.phases.sort(key=lambda x: x[0]) self.model.append([obj, SIZE_TIMELINEVIEW[self.current_size_index][0], SIZE_TIMELINEVIEW[self.current_size_index][1], SIZE_TEXT_TIMELINEVIEW[self.current_size_index]]) def set_day(self, day, force_update=False): if not force_update and self.old_date is not None: if (day.date - self.old_date) == datetime.timedelta(days=0) and \ self.in_erase_mode: #don't update the model when we are in ERASE_MODE return self.old_date = day.date items = day.get_time_map() self.set_model_from_list(items) def set_zoom(self, size_index): if size_index > len(SIZE_TIMELINEVIEW) - 1 or size_index < 0: return self.current_size_index = size_index for row in self.model: row[1] = SIZE_TIMELINEVIEW[size_index][0] row[2] = SIZE_TIMELINEVIEW[size_index][1] row[3] = SIZE_TEXT_TIMELINEVIEW[size_index] self.queue_draw() def on_drag_data_get(self, treeview, context, selection, target_id, etime): tree_selection = treeview.get_selection() model, iter = tree_selection.get_selected() content_object = model.get_value(iter, 0) uri = content_object.uri if target_id == TYPE_TARGET_TEXT: selection.set_text(uri, -1) elif target_id == TYPE_TARGET_URI: if uri.startswith("file://"): unquoted_uri = urllib.unquote(uri) if os.path.exists(unquoted_uri[7:]): selection.set_uris([uri]) def on_button_press(self, widget, event): if event.button == 3 and not self.in_erase_mode: path = self.get_dest_row_at_pos(int(event.x), int(event.y)) if path: model = self.get_model() obj = model[path[0]][0] self.popupmenu.do_popup(event.time, [obj]) return True return False def on_button_release (self, widget, event): if event.button == 1 and not self.on_drag: self.on_drag = False path = self.get_dest_row_at_pos(int(event.x), int(event.y)) if path: model = self.get_model() obj = model[path[0]][0] if self.in_erase_mode: model.remove(model[path[0]].iter) self.popupmenu.do_delete_object(obj) else: obj.launch() return True return False def on_drag_begin(self, widget, context, *args): self.on_drag = True def on_drag_end(self, widget, context, *args): self.on_drag = False def on_scroll_event(self, widget, event): if event.state == gtk.gdk.CONTROL_MASK: if event.direction == gtk.gdk.SCROLL_UP: self.zoom_slider.set_value(self.current_size_index + 1) elif event.direction == gtk.gdk.SCROLL_DOWN: self.zoom_slider.set_value(self.current_size_index - 1) return True def set_slider(self, slider): self.zoom_slider = slider def toggle_erase_mode(self): self.in_erase_mode = not self.in_erase_mode def on_activate(self, widget, path, column): model = self.get_model() obj = model[path][0] if self.in_erase_mode: model.remove(model[path[0]].iter) self.popupmenu.do_delete_object(obj) else: obj.launch() def change_style(self, widget, old_style): """ Sets the widgets style and coloring """ #layout = self.create_pango_layout("") #layout.set_markup("qPqPqP|\nqPqPqP|") #tw, th = layout.get_pixel_size() #self.render.set_property("size_h", max(self.render.height, th + 3 + _TimelineRenderer.barsize)) if self.window: width = self.window.get_geometry()[2] - 4 self.render.set_property("size_w", max(self.render.width, width)) def change_color(color, inc): color = shade_gdk_color(color, inc/100.0) return color normal = (self.style.text[gtk.STATE_NORMAL], change_color(self.style.text[gtk.STATE_INSENSITIVE], 70)) selected = (self.style.text[gtk.STATE_SELECTED], self.style.text[gtk.STATE_SELECTED]) self.render.textcolor[gtk.STATE_NORMAL] = normal self.render.textcolor[gtk.STATE_SELECTED] = selected class _TimelineHeader(gtk.DrawingArea): time_text = {4:"4:00", 8:"8:00", 12:"12:00", 16:"16:00", 20:"20:00"} odd_line_height = 6 even_line_height = 12 line_color = (0, 0, 0, 1) def __init__(self): super(_TimelineHeader, self).__init__() self.connect("expose-event", self.expose) self.connect("style-set", self.change_style) self.set_size_request(100, 12) def expose(self, widget, event): window = widget.window context = widget.window.cairo_create() layout = self.create_pango_layout(" ") width = event.area.width widget.style.set_background(window, gtk.STATE_NORMAL) context.set_source_rgba(*self.line_color) context.set_line_width(2) self.draw_lines(window, context, layout, width) def draw_text(self, window, context, layout, x, text): x = int(x) color = self.style.text[gtk.STATE_NORMAL] markup = "%s" % (color.to_string(), text) pcontext = pangocairo.CairoContext(context) layout.set_markup(markup) xs, ys = layout.get_pixel_size() pcontext.move_to(x - xs/2, 0) pcontext.show_layout(layout) def draw_line(self, window, context, x, even): x = int(x)+0.5 height = self.even_line_height if even else self.odd_line_height context.move_to(x, 0) context.line_to(x, height) context.stroke() def draw_lines(self, window, context, layout, width): xinc = width/24 for hour in xrange(1, 24): if self.time_text.has_key(hour): self.draw_text(window, context, layout, xinc*hour, self.time_text[hour]) else: self.draw_line(window, context, xinc*hour, bool(hour % 2)) def change_style(self, widget, old_style): layout = self.create_pango_layout("") layout.set_markup("qPqPqP|") tw, th = layout.get_pixel_size() self.set_size_request(tw*5, th+4) self.line_color = get_gtk_rgba(widget.style, "bg", 0, 0.94) class PinBox(DayView, Droppable): def __init__(self): self.event_timerange = TimeRange.until_now() DayView.__init__(self, title=_("Pinned Items"))#_("Pinned items")) self.notebook = gtk.Notebook() Droppable.__init__(self, self.notebook) bookmarker.connect("reload", self.set_from_templates) self.set_from_templates() @property def event_templates(self): if not bookmarker.bookmarks: # Abort, or we will query with no templates and get lots of # irrelevant events. return None templates = [] for bookmark in bookmarker.bookmarks: subject = Subject.new_for_values(uri=bookmark) templates.append(Event.new_for_values(subjects=[subject])) return templates def set_from_templates(self, *args, **kwargs): if bookmarker.bookmarks: CLIENT.find_event_ids_for_templates( self.event_templates, self.do_set, self.event_timerange, StorageState.Any, 10000, ResultType.MostRecentSubjects) else: self.do_set([]) def do_set(self, event_ids): objs = [] for id_ in event_ids: objs += [ContentStruct(id_)] self.set_items(objs) # Make the pin icons visible self.view.show_all() self.show_all() def set_items(self, items): self.clear() box = CategoryBox(None, items, True, itemoff=4) self.view.pack_start(box) for w in self: self.remove(w) self.notebook.append_page(self.view, self.label) self.label.set_alignment(0.01, 0.5) self.notebook.set_tab_label_packing(self.view, True, True, gtk.PACK_START) self.set_border_width(4) if len(items) > 0: self.pack_start(self.notebook) def on_drag_data_received(self, wid, context, x, y, selection, target_type, time): uri = unicode(selection.data.strip()) isbookmarked = bookmarker.is_bookmarked(uri) if not isbookmarked: bookmarker.bookmark(uri) ## gobject registration gobject.type_register(_TimelineRenderer) gobject.type_register(_ThumbViewRenderer) pinbox = PinBox() gnome-activity-journal-0.8.0/src/histogram.py0000644000175000017500000005355611565730047020634 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2010 Randal Barlow # Copyright © 2010 Markus Korn # Copyright © 2010 Siegfried Gevatter # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import datetime import cairo import calendar import gettext import gobject import gtk from math import pi as PI import pango from common import * def get_gc_from_colormap(widget, shade): """ Gets a gtk.gdk.GC and modifies the color by shade """ gc = widget.style.text_gc[gtk.STATE_INSENSITIVE] if gc: color = widget.style.text[4] color = shade_gdk_color(color, shade) gc.set_rgb_fg_color(color) return gc class CairoHistogram(gtk.DrawingArea): """ A histogram which is represented by a list of dates, and nitems. There are a few maintenance issues due to the movement abilities. The widget currently is able to capture motion events when the mouse is outside the widget and the button is pressed if it was initially pressed inside the widget. This event mask magic leaves a few flaws open. """ _selected = (0,) padding = 2 bottom_padding = 23 top_padding = 2 wcolumn = 12 xincrement = wcolumn + padding start_x_padding = 2 max_width = xincrement column_radius = 0 stroke_width = 1 stroke_offset = 0 min_column_height = 4 max_column_height = 101 gc = None pangofont = None _disable_mouse_motion = False selected_range = 0 _highlighted = [] _last_location = -1 _single_day_only = False colors = { "bg" : (1, 1, 1, 1), "base" : (1, 1, 1, 1), "column_normal" : (1, 1, 1, 1), "column_selected" : (1, 1, 1, 1), "column_alternative" : (1, 1, 1, 1), "column_selected_alternative" : (1, 1, 1, 1), "font_color" : "#ffffff", "stroke" : (1, 1, 1, 0), "shadow" : (1, 1, 1, 0), } _store = None __gsignals__ = { "selection-set" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)), "data-updated" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,()), "column_clicked" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) } _connections = {"style-set": "change_style", "expose_event": "_expose", "button_press_event": "mouse_press_interaction", "motion_notify_event": "mouse_motion_interaction", "key_press_event": "keyboard_interaction", "scroll-event" : "mouse_scroll_interaction", } _events = (gtk.gdk.KEY_PRESS_MASK | gtk.gdk.BUTTON_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.BUTTON_PRESS_MASK) def __init__(self): """ :param datastore: The.CairoHistograms two dimensional list of dates and nitems :param selected_range: the number of days displayed at once """ super(CairoHistogram, self).__init__() self._selected = [] self.set_events(self._events) self.set_flags(gtk.CAN_FOCUS) for key, val in self._connections.iteritems(): self.connect(key, getattr(self, val)) self.font_name = self.style.font_desc.get_family() def change_style(self, widget, old_style): """ Sets the widgets style and coloring """ self.colors = self.colors.copy() self.colors["bg"] = get_gtk_rgba(self.style, "bg", 0) self.colors["base"] = get_gtk_rgba(self.style, "base", 0) self.colors["column_normal"] = get_gtk_rgba(self.style, "text", 4, 1.17) self.colors["column_selected"] = get_gtk_rgba(self.style, "bg", 3) color = self.style.bg[gtk.STATE_NORMAL] fcolor = self.style.fg[gtk.STATE_NORMAL] self.colors["font_color"] = combine_gdk_color(color, fcolor).to_string() pal = get_gtk_rgba(self.style, "bg", 3, 1.2) self.colors["column_alternative"] = (pal[2], pal[1], pal[0], 1) self.colors["column_selected_alternative"] = get_gtk_rgba(self.style, "bg", 3, 0.6) self.colors["stroke"] = get_gtk_rgba(self.style, "text", 4) self.colors["shadow"] = get_gtk_rgba(self.style, "text", 4) self.font_size = self.style.font_desc.get_size()/1024 self.pangofont = pango.FontDescription(self.font_name + " %d" % self.font_size) self.pangofont.set_weight(pango.WEIGHT_BOLD) self.bottom_padding = self.font_size + 9 + widget.style.ythickness self.gc = get_gc_from_colormap(widget, 0.6) def set_store(self, store): self._store = store self.largest = min(max(max(map(lambda x: len(x), store.days)), 1), 200) if not self.get_selected(): self.set_selected([datetime.date.today()]) else: self.set_selected(self.get_selected()) self.queue_draw() self.last_updated = time.time() def get_store(self): return self._store def _expose(self, widget, event): """ The major drawing method that the expose event calls directly """ widget.style.set_background(widget.window, gtk.STATE_NORMAL) context = widget.window.cairo_create() self.expose(widget, event, context) def expose(self, widget, event, context): """ The minor drawing method :param event: a gtk event with x and y values :param context: This drawingarea's cairo context from the expose event """ if not self.pangofont: self.pangofont = pango.FontDescription(self.font_name + " %d" % self.font_size) self.pangofont.set_weight(pango.WEIGHT_BOLD) if not self.gc: self.gc = get_gc_from_colormap(widget, 0.6) context.set_source_rgba(*self.colors["base"]) context.set_operator(cairo.OPERATOR_SOURCE) #context.paint() context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() #context.set_source_rgba(*self.colors["bg"]) context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height - self.bottom_padding) context.fill() self.draw_columns_from_store(context, event, self.get_selected()) context.set_line_width(1) if type(self) == CairoHistogram: widget.style.paint_shadow(widget.window, gtk.STATE_NORMAL, gtk.SHADOW_IN, event.area, widget, "treeview", event.area.x, event.area.y, event.area.width, event.area.height - self.bottom_padding) if self.is_focus(): widget.style.paint_focus(widget.window, gtk.STATE_NORMAL, event.area, widget, None, event.area.x, event.area.y, event.area.width, event.area.height - self.bottom_padding) def draw_columns_from_store(self, context, event, selected): """ Draws columns from a datastore :param context: This drawingarea's cairo context from the expose event :param event: a gtk event with x and y values :param selected: a list of the selected dates """ x = self.start_x_padding months_positions = [] for day in self.get_store().days: if day.date.day == 1: months_positions += [(day.date, x)] if day.date in self._highlighted: color = self.colors["column_selected_alternative"] if day.date in selected else self.colors["column_alternative"] elif day.date in selected: color = self.colors["column_selected"] else: color = self.colors["column_normal"] self.draw_column(context, x, event.area.height, len(day), color) x += self.xincrement if x > event.area.width: # Check for resize self.set_size_request(x+self.xincrement, event.area.height) for date, xpos in months_positions: edge = 0 if (date, xpos) == months_positions[-1]: edge = len(self._store)*self.xincrement self.draw_month(context, xpos - self.padding, event.area.height, date, edge) self.max_width = x # remove me def draw_column(self, context, x, maxheight, nitems, color): """ Draws a columns at x with height based on nitems, and maxheight :param context: The drawingarea's cairo context from the expose event :param x: The current position in the image :param maxheight: The event areas height :param nitems: The number of items in the column to be drawn :param color: A RGBA tuple Example: (0.3, 0.4, 0.8, 1) """ if nitems > self.max_column_height: nitems = self.max_column_height maxheight = maxheight - self.bottom_padding - 2 height = int((((float(nitems)/self.largest)**0.33)*(maxheight-2))) - self.top_padding if height < self.min_column_height: height = self.min_column_height y = maxheight - height context.set_source_rgba(*color) context.move_to(x + self.column_radius, y) context.new_sub_path() if nitems > 4: context.arc(self.column_radius + x, self.column_radius + y, self.column_radius, PI, 3 * PI /2) context.arc(x + self.wcolumn - self.column_radius, self.column_radius + y, self.column_radius, 3 * PI / 2, 0) context.rectangle(x, y + self.column_radius, self.wcolumn, height - self.column_radius) else: context.rectangle(x, y, self.wcolumn, height) context.close_path() context.fill() def draw_month(self, context, x, height, date, edge=0): """ Draws a line signifying the start of a month """ context.set_source_rgba(*self.colors["stroke"]) context.set_line_width(self.stroke_width) context.move_to(x+self.stroke_offset, 0) context.line_to(x+self.stroke_offset, height - self.bottom_padding) context.stroke() month = calendar.month_name[date.month] date = "%s %d" % (self.colors["font_color"], month, date.year) layout = self.create_pango_layout(date) layout.set_markup(date) layout.set_font_description(self.pangofont) w, h = layout.get_pixel_size() if edge: if x + w > edge: x = edge - w - 5 self.window.draw_layout(self.gc, int(x + 3), int(height - self.bottom_padding/2 - h/2), layout) def set_selected(self, dates): if dates == self._selected: return False self._selected = dates if dates: date = dates[-1] self.emit("selection-set", dates) self.queue_draw() return True def get_selected(self): """ returns a list of selected indices """ return self._selected def clear_selection(self): """ clears the selected items """ self._selected = [] self.queue_draw() def set_highlighted(self, highlighted): """ Sets the widgets which should be highlighted with an alternative color :param highlighted: a list of indexes to be highlighted """ if isinstance(highlighted, list): self._highlighted = highlighted else: raise TypeError("highlighted is not a list") self.queue_draw() def clear_highlighted(self): """Clears the highlighted color""" self._highlighted = [] self.queue_draw() def set_single_day(self, choice): """ Allows the cal to enter a mode where the trailing days are not selected but still kept """ self._single_day_only = choice self.queue_draw() def get_store_index_from_cartesian(self, x, y): """ Gets the datastore index from a x, y value """ return int((x - self.start_x_padding) / self.xincrement) def keyboard_interaction(self, widget, event): if event.keyval in (gtk.keysyms.space, gtk.keysyms.Right, gtk.keysyms.Left, gtk.keysyms.BackSpace): i = self.get_selected() if isinstance(i, list) and len(i) > 0: i = i[-1] if event.keyval in (gtk.keysyms.space, gtk.keysyms.Right): i = i + datetime.timedelta(days=1) elif event.keyval in (gtk.keysyms.Left, gtk.keysyms.BackSpace): i = i + datetime.timedelta(days=-1) if i < datetime.date.today() + datetime.timedelta(days=1): self.change_location(i) def mouse_motion_interaction(self, widget, event, *args, **kwargs): """ Reacts to mouse moving (while pressed), and clicks """ #if (event.state == gtk.gdk.BUTTON1_MASK and not self._disable_mouse_motion): location = min((self.get_store_index_from_cartesian(event.x, event.y), len(self._store.days) - 1)) if location != self._last_location: self.change_location(location) self._last_location = location #return True return False def mouse_press_interaction(self, widget, event, *args, **kwargs): if (event.y > self.get_size_request()[1] - self.bottom_padding and event.y < self.get_size_request()[1]): return False location = min((self.get_store_index_from_cartesian(event.x, event.y), len(self._store.days) - 1)) if location != self._last_location: self.change_location(location) self._last_location = location return True def mouse_scroll_interaction(self, widget, event): date = self.get_selected()[-1] i = self.get_store().dates.index(date) if (event.direction in (gtk.gdk.SCROLL_UP, gtk.gdk.SCROLL_RIGHT)): if i+1< len(self.get_store().days): self.change_location(i+1) elif (event.direction in (gtk.gdk.SCROLL_DOWN, gtk.gdk.SCROLL_LEFT)): if 0 <= i-1: self.change_location(i-1) def change_location(self, location): """ Handles click events """ if isinstance(location, int): if location < 0: return False store = self.get_store() date = store.days[location].date else: date = location self.emit("column_clicked", date) return True left_icon = get_icon_for_name("back", 16) right_icon = get_icon_for_name("forward", 16) def _expose_scroll_buttons(self, widget, event): render_pixbuf(widget.window, event.area.x + event.area.width-16, event.area.y+event.area.height-16, self.right_icon, False) render_pixbuf(widget.window, event.area.x, event.area.y+event.area.height-16, self.left_icon, False) def _in_area(coord_x, coord_y, area): """check if some given X,Y coordinates are within an area. area is either None or a (top_left_x, top_left_y, width, height)-tuple""" if area is None: return False area_x, area_y, area_width, area_height = area return (area_x <= coord_x <= area_x + area_width) and \ (area_y <= coord_y <= area_y + area_height) def _in_area(coord_x, coord_y, area): """check if some given X,Y coordinates are within an area. area is either None or a (top_left_x, top_left_y, width, height)-tuple""" if area is None: return False area_x, area_y, area_width, area_height = area return (area_x <= coord_x <= area_x + area_width) and \ (area_y <= coord_y <= area_y + area_height) class TooltipEventBox(gtk.EventBox): """ A event box housing the tool tip logic that can be used for a CairoHistogram. Otherwise it interferes with the scrubbing mask code """ _saved_tooltip_location = None def __init__(self, histogram, container): super(TooltipEventBox, self).__init__() self.add(histogram) self.histogram = histogram self.container = container self.set_property("has-tooltip", True) self.connect("query-tooltip", self.query_tooltip) def query_tooltip(self, widget, x, y, keyboard_mode, tooltip): if y < self.histogram.get_size_request()[1] - self.histogram.bottom_padding: location = self.histogram.get_store_index_from_cartesian(x, y) if location != self._saved_tooltip_location: # don't show the previous tooltip if we moved to another # location self._saved_tooltip_location = location return False try: day = self.histogram.get_store().days[location] count = len(day) except IndexError: # there is no bar for at this location # don't show a tooltip return False date = day.date.strftime("%A, %d %B, %Y") tooltip.set_text("%s\n%i %s" % (date, count, gettext.ngettext("item", "items", count))) else: return False return True class JournalHistogram(CairoHistogram): """ A subclass of CairoHistogram with theming to fit into Journal """ padding = 2 column_radius = 1.3 top_padding = 6 bottom_padding = 29 wcolumn = 10 xincrement = wcolumn + padding column_radius = 2 stroke_width = 2 stroke_offset = 1 font_size = 12 min_column_height = 2 def change_style(self, widget, *args, **kwargs): self.colors = self.colors.copy() self.colors["bg"] = get_gtk_rgba(self.style, "bg", 0) self.colors["color"] = get_gtk_rgba(self.style, "base", 0) self.colors["column_normal"] = get_gtk_rgba(self.style, "bg", 1) self.colors["column_selected"] = get_gtk_rgba(self.style, "bg", 3) self.colors["column_selected_alternative"] = get_gtk_rgba(self.style, "bg", 3, 0.7) self.colors["column_alternative"] = get_gtk_rgba(self.style, "text", 2) self.colors["stroke"] = get_gtk_rgba(self.style, "bg", 0) self.colors["shadow"] = get_gtk_rgba(self.style, "bg", 0, 0.98) self.font_size = self.style.font_desc.get_size()/1024 self.bottom_padding = self.font_size + 9 + widget.style.ythickness self.gc = self.style.text_gc[gtk.STATE_NORMAL] self.pangofont = pango.FontDescription(self.font_name + " %d" % self.font_size) self.pangofont.set_weight(pango.WEIGHT_BOLD) class HistogramWidget(gtk.Viewport): """ A container for a CairoHistogram which allows you to scroll """ __gsignals__ = { # the index of the first selected item in the datastore. "date-changed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)), } def __init__(self, histo_type=CairoHistogram): """ :param histo_type: a :class:`CairoHistogram ` or a derivative """ super(HistogramWidget, self).__init__() screen = self.get_screen() if screen.get_width() < 1280: size = (600, 55) else: size = (600, 75) self.set_shadow_type(gtk.SHADOW_NONE) self.histogram = histo_type() self.eventbox = TooltipEventBox(self.histogram, self) self.set_size_request(*size) self.add(self.eventbox) self.histogram.connect("column_clicked", self.date_changed) self.histogram.connect("selection-set", self.scrubbing_fix) self.histogram.queue_draw() self.queue_draw() self.connect("size-allocate", self.on_resize) self.histogram.connect("button-press-event", self.mouse_click_scroll) def mouse_click_scroll(self, widget, event): hadjustment = self.get_hadjustment() value = hadjustment.get_value() if event.x - value < 16: hadjustment.set_value(max(0, value-10)) elif event.x > value + hadjustment.page_size - 16: hadjustment.set_value(min(self.histogram.max_width, value+10)) self.histogram.queue_draw() def on_resize(self, widget, allocation): dates = self.histogram.get_selected() self.scrubbing_fix(self.histogram, dates) def date_changed(self, widget, date): self.emit("date-changed", date) def set_store(self, store): self.histogram.set_store(store) self.scroll_to_end() def set_dates(self, dates): self.histogram.set_selected(dates) def scroll_to_end(self, *args, **kwargs): """ Scroll to the end of the drawing area's viewport """ hadjustment = self.get_hadjustment() hadjustment.set_value(1) hadjustment.set_value(self.histogram.max_width - hadjustment.page_size) def scrubbing_fix(self, widget, dates): """ Allows scrubbing to scroll the scroll window """ if not len(dates): return store = widget.get_store() i = store.dates.index(dates[0]) hadjustment = self.get_hadjustment() proposed_xa = ((i) * self.histogram.xincrement) + self.histogram.start_x_padding proposed_xb = ((i + len(dates)) * self.histogram.xincrement) + self.histogram.start_x_padding if proposed_xa < hadjustment.value: hadjustment.set_value(proposed_xa) elif proposed_xb > hadjustment.value + hadjustment.page_size: hadjustment.set_value(proposed_xb - hadjustment.page_size) gnome-activity-journal-0.8.0/src/quickconf.py0000644000175000017500000002447111404711063020600 0ustar rainctrainct# -*- coding: utf-8 -*- # # QuickConf - Use GConf, quickly! # # Copyright © 2010 Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import gconf import functools class BadSchemaFileError(Exception): pass class QuickConf: """ Abstraction layer around gconf.Client, providing several features: * Dictionary-like access to keys and transparent handling of their type. * Automatic prefixation of key names with their root path. * Support for specifying a default value in case a key is unset. * Support for asserting that the types of given values are correct, reading them from a .schemas file. """ _root = None _schema = None _schema_strict = False _schema_strict_read = False _typemap = { int: 'int', str: 'string', bool: 'bool', float: 'float', list: 'list', tuple: 'list', } _typemap_inv = dict(zip(_typemap.values(), _typemap.keys())) def __init__(self, root=None, preload=None, gconf_client=None): self._gconf = gconf.Client() or gconf_client self._preload = preload or gconf.CLIENT_PRELOAD_RECURSIVE if root: self.set_root(root) # We give read-only access to the GConf Client instance in case users # need to access additional functionality. @property def gconf(self): """ The `gconf.Client' instance internally used by QuickConf. """ return self._gconf def _parse_schema_file(self, schema_file): """ Parse the given .schema or .schema.in file. Return True if successful or false if the file can't be accessed. In case the file can't be parsed correctly, raise BadSchemaFileError. """ from xml.dom.minidom import parse as parse_xml from xml.parsers.expat import ExpatError try: content = parse_xml(schema_file) except IOError: return False except ExpatError, e: raise BadSchemaFileError, e.message self._schema = {} try: for entry in content.getElementsByTagName('schema'): key = entry.getElementsByTagName('applyto')[0].childNodes[0].data if key in self._schema: raise BadSchemaFileError, 'duplicate key: %s' % key type = entry.getElementsByTagName('type')[0].childNodes[0].data default = entry.getElementsByTagName('default') if default: default = self._typemap_inv[type](default[0].childNodes[0].data) self._schema[key] = (type, default if default else None) except IndexError: raise BadSchemaFileError, \ 'missing "key" or "type" entry in node' return True def set_schema(self, *schema_files, **kwargs): """ set_schema(schema_files...) -> None Parse the given .schema or .schema.in file and extract key names, types and default values from it. Type information will be used to perform conversions and ensure all keys get the right type. Default values will be returned when accessing an unset key, unless another default value is explicitly provided when accessing the key. The type checking can avoid problems with code such as the following: >>> conf['value'] = raw_input('Introduce a number:') Where "value" would get a string assigned instead of a number. Of course, the following code would be preferable: >>> conf['value'] = int(raw_input('Introduce a number:')) However, for convenience, QuickConf offers the possibility to handle this transparently when the required schemas are available. For further convenience, you can call this method passing several schema files as arguments. If this is done, set_schema will use the first of them which exists and is readable. In case none of them can be read, IOError will be raised, or in case a corrupt one is found, BadSchemaFileError. Additionally, if set_schema is called with the parameter "strict=True", trying to set a key not defined in the schema will raise a KeyError exception. If "strict_read=True" is used, the same will happen when trying to read a key not defined in the schema. """ if 'strict_read' in kwargs and kwargs['strict_read']: self._schema_strict = self._schema_strict_read = True elif 'strict' in kwargs and kwargs['strict']: self._schema_strict = True # Parse the first existing file of those provided for filename in schema_files: if self._parse_schema_file(filename): return raise IOError, 'None of the provided .schema files could be read.' def set_root(self, root): """ set_root(root) -> str Change the root path. Key names given to all other methods will be automatically prefixed with this path. """ if self._root: self._gconf.remove_dir(self._root) self._root = root.rstrip('/') self._gconf.add_dir(self._root, self._preload) def get_root(self): """ get_root() -> str Return the root path with which key names given in all other methods will be automatically prefixed. """ return self._root def __getitem__(self, key): return self.get(key) def __setitem__(self, key, value): return self.set(key, value) def get_complete_path(self, key): """ get_complete_path(key) -> str Return the complete GConf key name, after prefixing the given `key' with the root path specified when calling `__init__()' or using `set_root()'. """ return (self._root + '/' + key) if self._root else key # decorator def _normalize_key(method): @functools.wraps(method) def decorated(self, key, *args, **kwargs): return method(self, self.get_complete_path(key), *args, **kwargs) return decorated def _get_value(self, gconfvalue): value = getattr(gconfvalue, 'get_' + gconfvalue.type.value_nick)() if self._typemap[type(value)] == 'list': return [self._get_value(el) for el in value] return value @_normalize_key def get(self, key, default=None): """ get(key, [default]) -> bool/str/int/float/list Return the value of the given key or, if the key is unset, the value given as `default'. In case you have specified a .schemas file with `set_schema()', QuickConf will try to look for a default value there if need. """ gconfvalue = self._gconf.get(key) if not gconfvalue: if not default and self._schema: if key in self._schema: return self._schema[key][1] elif self._schema_strict_read: raise KeyError, \ 'Reading key not defined in schema: %s' % key return default return self._get_value(gconfvalue) @_normalize_key def set(self, key, value): """ set(key, value) -> None Assign the given value to the given key. """ keytype = None if self._schema: if key in self._schema: keytype = self._schema[key][0] safe_value = self._typemap_inv[keytype](value) elif self._schema_strict: raise KeyError, 'Writing key not defined in schema: %s' % key if not keytype: keytype = self._typemap[type(value)] safe_value = value setter = getattr(self._gconf, 'set_' + keytype) if keytype == 'list': # TODO: How is this represented in .schemas? elemtype = self._typemap[type(value[0])].upper() setter(key, getattr(gconf, 'VALUE_' + elemtype), safe_value) else: setter(key, safe_value) @_normalize_key def connect(self, key, callback, *user_data): """ connect(key, callback, [user_data...]) -> None Connect the given callback to change events of the given key. The callback method will receive the changed key and its value as parameters. If you need something else you can set it as user_data and you'll receive it aswell. """ def cb(gconfclient, id, gconfentry, *user_data2): key = gconfentry.get_key()[len(self._root)+1:] value = self._get_value(gconfentry.get_value()) if \ gconfentry.get_value() else None if user_data: callback(key, value, *user_data2) else: # Do not pass in user_data2, as GConf puts an useless # empty tuple there when there shouldn't be anything. callback(key, value) self._gconf.notify_add(key, cb, *user_data) @_normalize_key def remove_key(self, key): """ remove_key(key) -> None Unset a GConf key. """ self._gconf.unset(key) @_normalize_key def remove_path(self, path): """ remove_path(path) -> None Unset all GConf keys found in the given path. """ self._gconf.recursive_unset(path.rstrip('/'), gconf.UNSET_INCLUDING_SCHEMA_NAMES) gnome-activity-journal-0.8.0/src/__init__.py0000644000175000017500000000000011330612741020334 0ustar rainctrainctgnome-activity-journal-0.8.0/src/main.py0000644000175000017500000004066411565731445017562 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009-2010 Seif Lotfy # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Randal Barlow # Copyright © 2011 Stefano Candori # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import gtk import gettext import pango import gobject import time import datetime import os from activity_widgets import MultiViewContainer, TimelineViewContainer, ThumbViewContainer from supporting_widgets import DayButton, DayLabel, Toolbar, SearchBox, PreferencesDialog, ContextMenu, ThrobberPopupButton, \ ContextMenuMolteplicity, NiceBar from histogram import HistogramWidget from store import Store, tdelta, STORE, CLIENT from config import settings, get_icon_path, get_data_path, PluginManager from Indicator import TrayIconManager from common import SIZE_THUMBVIEW, SIZE_TIMELINEVIEW #TODO granularity scrool, alignment timelineview_icon #more metadata? use website cache as thumbpreview?? class ViewContainer(gtk.Notebook): __gsignals__ = { "new-view-added" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_PYOBJECT,)), "view-button-clicked" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_PYOBJECT,gobject.TYPE_INT)), } class ViewStruct(object): view = None button = None def __init__(self, view, button): self.view = view self.button = button def __init__(self, store): super(ViewContainer, self).__init__() self.store = store self.set_show_tabs(False) self.set_show_border(False) self.pages = [] self.tool_buttons = [] def set_day(self, day, page=None): force_update = True if page == None: page = self.page force_update = False if hasattr(self.pages[page], "set_day"): self.pages[page].set_day(day, self.store, force_update) def set_zoom(self, zoom): page = self.page if hasattr(self.pages[page], "set_zoom"): self.pages[page].set_zoom(zoom) def _register_new_view(self, viewstruct): self.append_page(viewstruct.view) self.pages.append(viewstruct.view) self.tool_buttons.append(viewstruct.button) if(len(self.tool_buttons)) > 1: viewstruct.button.set_group(self.tool_buttons[0]) viewstruct.button.set_flags(gtk.CAN_FOCUS) viewstruct.button.connect("toggled", self.view_button_toggled, len(self.pages)-1) viewstruct.view.show_all() return self.pages.index(viewstruct.view) def register_new_view(self, viewstruct): i = self._register_new_view(viewstruct) self.emit("new-view-added", viewstruct) return i def remove_view(self, i, destroy=False): """ :param i: a page number index starting at zero """ tb = self.tool_buttons[i] page = self.pages[i] del self.pages[i] del self.tool_buttons[i] self.remove_page(i) tb.parent.remove(tb) if destroy: page.destroy() tb.destroy() @property def page(self): return self.get_current_page() def view_button_toggled(self, button, i): if not button.get_active():return button.grab_focus() self.emit("view-button-clicked", button, i) def set_view_page(self, i): self.set_current_page(i) def _register_default_view(self, view): toolbutton = Toolbar.get_toolbutton(view.icon_path, view.dsc_text) self._register_new_view(self.ViewStruct(view, toolbutton)) self.set_view_page(0) def set_zoom_slider(self, hscale): #FIXME dirty hack for page in self.pages: page.set_slider(hscale) def toggle_erase_mode(self): for page in self.pages: page.toggle_erase_mode() class PortalWindow(gtk.Window): """ The primary application window """ def __init__(self): super(PortalWindow, self).__init__() # Important self._request_size() self.store = STORE self.day_iter = self.store.today self.pages_loaded = 0 self.current_zoom = 1 self.in_erase_mode = False self.view = ViewContainer(self.store) self.toolbar = Toolbar() default_views = (MultiViewContainer(), ThumbViewContainer(), TimelineViewContainer()) default_views[0].connect("view-ready", self._on_view_ready) map(self.view._register_default_view, default_views) map(self.toolbar.add_new_view_button, self.view.tool_buttons[::-1]) self.preferences_dialog = PreferencesDialog(parent=self) ContextMenu.set_parent_window(self) ContextMenuMolteplicity.set_parent_window(self) self.histogram = HistogramWidget() self.histogram.set_store(self.store) self.backward_button, ev_backward_button = DayButton.new(0) self.forward_button, ev_forward_button = DayButton.new(1, sensitive=False) self.nicebar = NiceBar() self.nicebar_timeout = None # use a table for the spinner (otherwise the spinner is massive!) spinner_table = gtk.Table(3, 3, False) label = gtk.Label() label.set_markup(_("Loading Journal...")) vbox = gtk.VBox(False, 5) pix = gtk.gdk.pixbuf_new_from_file(get_data_path("zeitgeist-logo.svg")) pix = pix.scale_simple(100, 100, gtk.gdk.INTERP_BILINEAR) zlogo = gtk.image_new_from_pixbuf(pix) vbox.pack_start(zlogo, False, False) vbox.pack_start(label, True) spinner_table.attach(vbox, 1, 2, 1, 2, gtk.EXPAND, gtk.EXPAND) self.hscale = gtk.HScale(gtk.Adjustment(1.0, 0.0, 3.0, 1.0, 1.0, 0.0)) self.hscale.set_size_request(120, -1) self.hscale.set_draw_value(False) al = gtk.Alignment(yalign=0.5) al.set_padding(0, 0, 8, 8) al.add(self.hscale) im_in = gtk.image_new_from_stock(gtk.STOCK_ZOOM_IN, gtk.ICON_SIZE_MENU) im_out = gtk.image_new_from_stock(gtk.STOCK_ZOOM_OUT, gtk.ICON_SIZE_MENU) self.throbber_popup_button = ThrobberPopupButton() # Widget placement vbox = gtk.VBox(); hbox = gtk.HBox();self.scale_box = gtk.HBox();self.histogramhbox = gtk.HBox() vbox_general = gtk.VBox();scale_toolbar_box = gtk.HBox() hbox.pack_start(ev_backward_button, False, False); hbox.pack_start(self.view, True, True, 6) hbox.pack_end(ev_forward_button, False, False); self.scale_box.pack_start(im_out,False,False);self.scale_box.pack_start(al, False, False) self.scale_box.pack_start(im_in,False,False);self.scale_box.pack_end(gtk.SeparatorToolItem(),False,False) scale_toolbar_box.pack_start(self.toolbar); scale_toolbar_box.pack_end(self.throbber_popup_button,False,False); scale_toolbar_box.pack_end(self.scale_box, False, False); vbox.pack_start(scale_toolbar_box, False, False); vbox.pack_start(self.nicebar,False,False);vbox.pack_start(hbox, True, True, 5); self.histogramhbox.pack_end(self.histogram, True, True, 32); self.histogramhbox.set_sensitive(False) self.spinner_notebook = gtk.Notebook() self.spinner_notebook.set_show_tabs(False) self.spinner_notebook.set_show_border(False) self.spinner_notebook.append_page(spinner_table) self.spinner_notebook.append_page(vbox) vbox_general.pack_start(self.spinner_notebook) vbox_general.pack_end(self.histogramhbox, False, False) self.add(vbox_general) vbox_general.show_all() self.scale_box.hide() self.show() self.nicebar.hide() SearchBox.hide() #Tray Icon self.tray_manager = TrayIconManager(self) # Settings self.view.set_day(self.store.today) self.view.set_zoom_slider(self.hscale) # Signal connections self.view.connect("new-view-added", lambda w, v: self.toolbar.add_new_view_button(v.button, len(self.view.tool_buttons))) self.connect("destroy", self.quit) self.connect("delete-event", self.on_delete) self.toolbar.connect("previous", self.previous) self.toolbar.connect("jump-to-today", lambda w: self.set_date(datetime.date.today())) self.toolbar.connect("next", self.next) self.hscale.connect("value-changed", self._on_zoom_changed) self.backward_button.connect("clicked", self.previous) self.forward_button.connect("clicked", self.next) self.forward_button.connect("jump-to-today", lambda w: self.set_date(datetime.date.today())) self.histogram.connect("date-changed", lambda w, date: self.set_date(date)) self.view.connect("view-button-clicked", self.on_view_button_click) self.store.connect("update", self.histogram.histogram.set_store) SearchBox.connect("search", self._on_search) self.throbber_popup_button.connect("toggle-erase-mode", self._on_toggle_erase_mode) SearchBox.connect("clear", self._on_search_clear) # Window configuration self.set_icon_name("gnome-activity-journal") self.set_icon_list( *[gtk.gdk.pixbuf_new_from_file(get_icon_path(f)) for f in ( "hicolor/16x16/apps/gnome-activity-journal.png", "hicolor/24x24/apps/gnome-activity-journal.png", "hicolor/32x32/apps/gnome-activity-journal.png", "hicolor/48x48/apps/gnome-activity-journal.png", "hicolor/256x256/apps/gnome-activity-journal.png")]) gobject.idle_add(self.setup) gobject.idle_add(self.load_plugins) def load_plugins(self): self.plug_manager = PluginManager(CLIENT, STORE, self) self.preferences_dialog.notebook.show_all() self.throbber_popup_button.preferences.connect("activate", lambda *args: self.preferences_dialog.show()) self.preferences_dialog.plug_tree.set_items(self.plug_manager) return False def setup(self, *args): self.set_title_from_date(self.day_iter.date) self.histogram.set_dates(self.active_dates) self.histogram.scroll_to_end() return False def set_visibility(self, val): if val: self.show() else: self.hide() def toggle_visibility(self): if self.get_property("visible"): self.hide() return False self.show() return True @property def active_dates(self): date = self.day_iter.date if self.view.page != 0: return [date] dates = [] for i in range(self.view.pages[0].num_pages): dates.append(date + tdelta(-i)) dates.sort() return dates def set_day(self, day): self.throbber_popup_button.image.animate_for_seconds(1) self.day_iter = day self.handle_button_sensitivity(day.date) self.view.set_day(day) self.histogram.set_dates(self.active_dates) self.set_title_from_date(day.date) def set_date(self, date): self.set_day(self.store[date]) def next(self, *args): day = self.day_iter.next(self.store) self.set_day(day) def previous(self, *args): day = self.day_iter.previous(self.store) self.set_day(day) def handle_button_sensitivity(self, date): today = datetime.date.today() if date == today: self.forward_button.set_sensitive(False) self.toolbar.nextd_button.set_sensitive(False) self.toolbar.home_button.set_sensitive(False) else: self.forward_button.set_leading(True) self.forward_button.set_sensitive(True) self.toolbar.nextd_button.set_sensitive(True) self.toolbar.home_button.set_sensitive(True) def on_view_button_click(self, w, button, i): self.view.set_view_page(i) self.view.set_day(self.day_iter, page=i) self.histogram.set_dates(self.active_dates) self.set_title_from_date(self.day_iter.date) if i == 0: self.scale_box.hide() else: self.view.set_zoom(self.current_zoom) self.scale_box.show() def _on_view_ready(self, view): if self.pages_loaded == view.num_pages - 1: self.histogramhbox.set_sensitive(True) self.spinner_notebook.set_current_page(1) else: self.pages_loaded += 1 def _on_search(self, box, results): dates = [] for obj in results: dates.append(datetime.date.fromtimestamp(int(obj.event.timestamp)/1000.0)) self.histogram.histogram.set_highlighted(dates) def _on_search_clear(self, *args): self.histogram.histogram.clear_highlighted() def _request_size(self): screen = self.get_screen().get_monitor_geometry( self.get_screen().get_monitor_at_point(*self.get_position())) min_size = (1024, 600) # minimum netbook size size = [ min(max(int(screen[2] * 0.80), min_size[0]), screen[2]), min(max(int(screen[3] * 0.75), min_size[1]), screen[3]) ] if settings["window_width"] and settings["window_width"] <= screen[2]: size[0] = settings['window_width'] if settings["window_height"] and settings["window_height"] <= screen[3]: size[1] = settings["window_height"] self.set_geometry_hints(min_width=1024, min_height=360) self.resize(size[0], size[1]) self._requested_size = size def _on_zoom_changed(self, hscale): self.current_zoom = int(hscale.get_value()) self.view.set_zoom(self.current_zoom) def _on_toggle_erase_mode(self, *args): self.in_erase_mode = not self.in_erase_mode if self.in_erase_mode: if self.nicebar_timeout: gobject.source_remove(self.nicebar_timeout) self.nicebar_timeout = None hand = gtk.gdk.Cursor(gtk.gdk.PIRATE) message = _("Erase Mode is active") background = NiceBar.ALERTBACKGROUND stock = gtk.STOCK_DIALOG_WARNING else: hand = gtk.gdk.Cursor(gtk.gdk.ARROW) message = _("Erase Mode deactivated") background = NiceBar.NORMALBACKGROUND stock = gtk.STOCK_DIALOG_INFO self.nicebar_timeout = gobject.timeout_add(3000, self.nicebar.remove_message) self.nicebar.display_message(message, background=background, stock=stock) self.window.set_cursor(hand) self.view.toggle_erase_mode() def set_title_from_date(self, date): pages = self.view.pages[0].num_pages if self.view.page == 0: start_date = date + tdelta(-pages+1) else: start_date = date if date == datetime.date.today(): end = _("Today") start = start_date.strftime("%A") elif date == datetime.date.today() + tdelta(-1): end = _("Yesterday") start = start_date.strftime("%A") elif date + tdelta(6) > datetime.date.today(): end = date.strftime("%A") start = start_date.strftime("%A") else: start = start_date.strftime("%d %B") end = date.strftime("%d %B") if self.view.page != 0: self.set_title(end + " - Activity Journal") else: self.set_title(_("%s to %s") % (start, end) + " - " + _("Activity Journal")) def on_delete(self, w, event): x, y = self.get_size() settings["window_width"] = x settings["window_height"] = y if settings.get("tray_icon", False): self.set_visibility(False) return True def quit_and_save(self, *args): x, y = self.get_size() settings["window_width"] = x settings["window_height"] = y gtk.main_quit() def quit(self, *args): gtk.main_quit() gnome-activity-journal-0.8.0/src/external.py0000644000175000017500000001366411576137747020467 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009-2010 Seif Lotfy # Copyright © 2010 Randal Barlow # Copyright © 2011 Collabora Ltd. # By Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import datetime import dbus import os import gtk import random import time from zeitgeist.client import ZeitgeistClient from zeitgeist.datamodel import Event, Subject, TimeRange, ResultType, \ Interpretation, Manifestation __all__ = ['CLIENT', 'CLIENT_VERSION', 'CLIENT_EXTENSION', 'TELEPATHY', 'HAMSTER', 'FTS'] # Zeitgeist class ClientExtension(object): _restarted = False def __init__(self): self._extension = CLIENT._iface.get_extension("Log", "journal/activity") def _show_error(self): dialog = gtk.MessageDialog( type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE) dialog.set_title( _("Incomplete GNOME Activity Journal installation")) dialog.set_markup(_( "GNOME Activity Journal comes together with a Zeitgeist " "extension which can't be found.\n\n" "If you've installed GNOME Activity Journal manually, " "please ensure that you've copied " "extension/gnome_activity_journal.py " "into ~/.local/share/zeitgeist/extensions/.")) def _exit(*args, **kwargs): raise SystemExit dialog.connect('response', _exit) dialog.show() gtk.main() def __getattr__(self, name): try: return getattr(self._extension, name) except TypeError: print _("Could not find extension method \"%s\"") % name if self._restarted: print _("Aborting.") self._show_error() raise SystemExit else: print _("Attempting to restart Zeitgeist...") self._restarted = True CLIENT._iface.Quit() self._extension.reconnect() return self.__getattr__(name) try: CLIENT = ZeitgeistClient() except RuntimeError, e: print "%s: %s" % (_("ERROR"), _("Unable to connect to Zeitgeist:")) print "%s" % e CLIENT = CLIENT_VERSION = CLIENT_EXTENSION = None else: CLIENT_VERSION = CLIENT.get_version() CLIENT_EXTENSION = ClientExtension() STORE = None try: BUS = dbus.SessionBus() except Exception: BUS = None # Telepathy TELEPATHY = None # Hamster HAMSTER_PATH = "/org/gnome/Hamster" HAMSTER_URI = "org.gnome.Hamster" class Hamster(object): class HamsterEvent(Event): def _HAMSTER_ID_COUNTER(): i = 1 while True: i -= 1 yield i HAMSTER_ID_COUNTER = _HAMSTER_ID_COUNTER() def __init__(self, *args, **kwargs): Event.__init__(self, *args, **kwargs) self._id = self.HAMSTER_ID_COUNTER.next() @property def id(self): return self._id class Fact(object): def __init__(self, dictionary): self._dictionary = dictionary def __getattr__(self, key): if self._dictionary.has_key(key): return self._dictionary[key] return object.__getattribute__(self, key) def _make_event(self, tval, interp): return Hamster.HamsterEvent.new_for_values( interpretation = interp, manifestation = Manifestation.USER_ACTIVITY.uri, actor = "applications://hamster-standalone.desktop", timestamp = tval*1000, subject_interpretation = Interpretation.TODO.uri, subject_manifestation = Manifestation.SCHEDULED_ACTIVITY.uri, subject_text = str(self.name) + ": " + str(self.description), subject_uri = ("hamster://%d" % int(self.id)), ) def get_events(self): events = [] events.append(self._make_event(int(self.start_time+time.timezone), Interpretation.ACCESS_EVENT.uri)) if self.end_time: events.append(self._make_event(int(self.end_time+time.timezone), Interpretation.LEAVE_EVENT.uri)) return events def __init__(self): self.hamster = BUS.get_object(HAMSTER_URI, HAMSTER_PATH) self.iface = dbus.Interface(self.hamster, dbus_interface=HAMSTER_URI) def get_facts(self, start=1, end=86400, date=None): if date: start = time.mktime(date.timetuple()) - time.timezone end = start+86399 start -= 86400 end -= 86400 return map(self.Fact, self.iface.GetFacts(start, end)) try: HAMSTER = Hamster() except Exception: HAMSTER = None class ZeitgeistFTS(object): result_type_relevancy = 100 def __init__(self): self._fts = BUS.get_object('org.gnome.zeitgeist.Engine', '/org/gnome/zeitgeist/index/activity') self.fts = dbus.Interface(self._fts, 'org.gnome.zeitgeist.Index') def search(self, text, templates=None): results, count = self.fts.Search(text, TimeRange.always(), templates if templates else [] , 0, 10, self.result_type_relevancy) return map(Event, results) try: FTS = ZeitgeistFTS() except Exception: FTS = None gnome-activity-journal-0.8.0/src/plugins/0000755000175000017500000000000011610346154017721 5ustar rainctrainctgnome-activity-journal-0.8.0/src/plugins/example_plugin.py0000644000175000017500000000175011404711063023303 0ustar rainctrainct# from src import common # For common functions used by journal # from src import supporting_widgets to use the non view related widgets journal uses throughout __plugin_name__ = "Example Plugin" # Enter a detailed description here __description__ = "An example plugin, which does nothing important" def activate(client, store, window): """ This function is called to activate the plugin. :param client: the zeitgeist client used by journal :param store: the date based store which is used by journal to handle event and content object request :param window: the activity journal primary window """ print "Activate" def deactivate(client, store, window): """ This function is called to activate the plugin. :param client: the zeitgeist client used by journal :param store: the date based store which is used by journal to handle event and content object request :param window: the activity journal primary window """ print "Deactivate" gnome-activity-journal-0.8.0/src/plugins/__init__.py0000644000175000017500000000000011404711063022014 0ustar rainctrainctgnome-activity-journal-0.8.0/src/store.py0000644000175000017500000005013711576131321017753 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2010 Randal Barlow # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Stefano Candori # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import datetime import dbus import gobject import gtk import sys import time import threading from zeitgeist.datamodel import Event, ResultType, Interpretation, TimeRange, \ Subject, StorageState import content_objects import external from external import CLIENT, CLIENT_EXTENSION MAXEVENTS = 999999 tdelta = lambda x: datetime.timedelta(days=x) def get_related_events_for_uri(uri, callback): """ :param uri: A uri for which to request related uris using zetigeist :param callback: this callback is called once the events are retrieved for the uris. It is called with a list of events. """ def _event_request_handler(ids): events = [] for id_ in ids: try: events.append(STORE.get_event_from_id(id_)) except KeyError as e: print "%s" % e callback(events) def _event_id_request_handler(uris): templates = [] if len(uris) > 0: for i, uri in enumerate(uris): sub = Subject.new_for_values(uri=uri) templates += [ Event.new_for_values(subjects=[sub]), ] CLIENT.find_event_ids_for_templates(templates, _event_request_handler, TimeRange.until_now(), num_events=len(uris), storage_state=StorageState.Available, result_type=ResultType.MostRecentSubjects) end = time.time() * 1000 start = end - (86400*30*1000) CLIENT.find_related_uris_for_uris([uri], _event_id_request_handler) def reduce_dates_by_timedelta(dates, delta): new_dates = [] for date in dates: new_dates += [date + delta] return new_dates class DoEmit(object): """ Calls emit_update on the methods class """ def __init__(self, signal): self.signal = signal def __call__(self, function): def wrapper(instance, *args, **kwargs): value = function(instance, *args, **kwargs) instance.emit(self.signal) return value return wrapper class CachedAttribute(object): """ runs the method once, finds the value, and replace the descriptor in the instance with the found value """ def __init__(self, method, name=None): self.method = method self.attr_name = name or method.__name__ def __get__(self, instance, cls): if instance is None: return self value = self.method(instance) setattr(instance, self.attr_name, value) return value class ContentStruct(object): id = 0 event = None _content_object_built = False @CachedAttribute def content_object(self): self._content_object_built = True return content_objects.ContentObject.new_from_event(self.event) @CachedAttribute def event(self): events = CLIENT._iface.GetEvents([self.id]) if events: return Event(events[0]) def __init__(self, id, event=None, content_object=None, build=False): self.id = id if event: self.event = event if content_object: self.content_object = content_object if build: CLIENT.get_events([self.id], self.set_event) def set_event(self, value): if isinstance(value, dbus.Array) or isinstance(value, list) or isinstance(value, tuple) and len(value): self.event = value[0] elif isinstance(value, Event): self.event = value else: self.event = ContentStruct.event self.build_struct() def build_struct(self): gtk.gdk.threads_enter() self._content_object_built = True if not self.event.subjects[0].startswith("http"): self.content_object = content_objects.ContentObject.new_from_event(self.event) gtk.gdk.threads_leave() class Day(gobject.GObject): __gsignals__ = { "update" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()) } date = None start = 0 end = 86400 @property def time_range(self): return [self.start*1000, self.end*1000] @property def items(self): self.load_ids() return self._items.values() @CachedAttribute def templates(self): subject = Subject() subject.uri = "!application://*" return[Event.new_for_values(subjects = [subject], actor="!application://activity-log-manager.desktop")] def __init__(self, date, days_population=None): super(Day, self).__init__() self.date = date self._items = {}#id:ContentItem self._loaded = False self.start = int(time.mktime(date.timetuple())) self.end = self.start+86399 self._population = None if days_population: for timestamp, count in days_population: # they are ordered descending # Ugly hack to adjust for local/UTC time. Screw you timezones! timestamp += (time.gmtime().tm_hour - time.localtime().tm_hour) * 3600 + \ (time.gmtime().tm_min - time.localtime().tm_min) * 60 if timestamp >= self.start: if timestamp < self.end: self._population = count break else: break else: self.load_ids() if external.HAMSTER: try: facts = external.HAMSTER.get_facts(self.start, self.end) for fact in facts: self.insert_events(None, fact.get_events()) except TypeError: pass #print "Hamster support disabled temporarely" def load_ids(self): if not self._loaded: self._loaded = True CLIENT.find_events_for_templates(self.templates, self.set_ids, self.time_range, num_events=MAXEVENTS, storage_state=StorageState.Available) CLIENT.install_monitor(self.time_range, self.templates, self.insert_events, self.remove_ids) def __getitem__(self, id_): self.load_ids() return self._items[id_] def __len__(self): if self._loaded: return len(self._items) return self._population or 0 def has_id(self, id_): if not self._loaded: self.load_ids() return self._items.has_key(id_) @DoEmit("update") def set_ids(self, event_ids): deleted_uris = STORE.list_deleted_uris for event in event_ids: #let's update the GUI gtk.gdk.threads_enter() while gtk.events_pending():gtk.main_iteration(False) gtk.gdk.threads_leave() if deleted_uris is not None: if event.subjects[0].uri not in deleted_uris: self._items[event.id] = ContentStruct(event.id, event) else: self._items[event.id] = ContentStruct(event.id, event) @DoEmit("update") def remove_ids(self, time_range, ids): for id_ in ids: try: del self._items[id_] except KeyError: pass @DoEmit("update") def insert_events(self, time_range, events): for event in events: self._items[event.id] = ContentStruct(event.id, event) @DoEmit("update") def insert_event(self, event, overwrite=False): """ Insert an event into the day object Emits a 'update' signal """ return self._insert_event(event, overwrite) def _insert_event(self, event, overwrite=False): """ Insert an event into the day object without emitting a 'update' signal """ if not overwrite and event.id in self._items: self._items[event.id].event = event return False self._items[event.id] = ContentStruct(event.id, event) if overwrite: self._items[event.id]._content_object_built = True self._items[event.id].content_object = content_objects.ContentObject.new_from_event(event) return True def next(self, store=None): """ Return the next day in the given store """ if not store: store = STORE # Singleton date = self.date + datetime.timedelta(days=1) return store[date] def previous(self, store=None): """ Return the previous day in the given store """ if not store: store = STORE # Singleton date = self.date + datetime.timedelta(days=-1) return store[date] def filter(self, event_template=None, result_type=None): self.load_ids() if event_template: items = self.filter_event_template(event_template) items = self.filter_result_type(items, result_type) elif result_type: items = self.filter_result_type(self._items.values(), result_type) else: items = self._items.values() #I reverse the list to make MODIFY/ACCESS_EVENT "more important" than CREATE ones #Doing that, fx. tomboy's note names are updated - cando items.sort(key=lambda obj: int(obj.event.timestamp),reverse=True) return items def filter_event_template(self, event_template): items = [] if isinstance(event_template, Event): for obj in self._items.values(): if obj.event.matches_template(event_template): items.append(obj) elif event_template: for template in event_template: items += self.filter(template) items = list(set(items)) return items def filter_result_type(self, items, result_type): if items and result_type is ResultType.MostRecentSubjects: item_dict = {} for item in items: subject_uri = item.event.subjects[0].uri item_dict[subject_uri] = item items = item_dict.values() return items def get_time_map(self): start = self.start results = {} for item in self.items: uri = item.event.subjects[0].uri if uri.startswith("http://") or uri.startswith("https://"): continue if not uri in results: results[uri] = [] if not item.event.interpretation == Interpretation.LEAVE_EVENT.uri: results[uri].append([item, 0]) else: if not len(results[uri]) == 0: #print "***", results[uri] results[uri][len(results[uri])-1][1] = (int(item.event.timestamp)) - int(results[uri][-1][0].event.timestamp) else: tend = int(item.event.timestamp)/1000 item.event.timestamp = str(start) results[uri].append([item, tend - start]) results = list(sorted(results.itervalues(), key=lambda r: \ r[0][0].event.timestamp)) return results def __set_events_by_id(self, events): for event in events: self._items[event.id].event = event self._items[event.id].build_struct() class Store(gobject.GObject): __gsignals__ = { "update" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()) } @property def today(self): return self[datetime.date.today()] @property def days(self): dates = self.dates return [self._days[date] for date in dates] @property def dates(self): dates = self._days.keys() dates.sort() return dates @property def list_deleted_uris(self): return self._deleted_uris @property def loaded_items(self): for day in self.days: for item in day.items: yield item def __init__(self): super(Store, self).__init__() self.run_build_thread = False self._days = {} self._day_connections = {} self._deleted_uris = [] #Search for uris that have been deleted in order to not display them. #FIXME we should add a timestamp field with the deleted uri #to prevent that a recent event with same uri than an older and deleted one #isn't displayed. - cando self._deleted_uris = [] subject = Subject() subject.uri = "!application://*" template = Event.new_for_values(interpretation=Interpretation.DELETE_EVENT.uri, subjects = [subject], actor="!application://activity-log-manager.desktop") CLIENT.find_events_for_templates((template,), self.__set_deleted_uris, TimeRange.until_now(), num_events=MAXEVENTS) global currentTimestamp, histogramLoaderCounter today = datetime.date.today() currentTimestamp = time.mktime(today.timetuple()) days_population = CLIENT_EXTENSION.GetHistogramData() for i in xrange(50 * 6): date = datetime.date.fromtimestamp(currentTimestamp) day = Day(date, days_population) self.add_day(date, day) currentTimestamp -= 86400 for day in self.days[-6:]: day.load_ids() content_objects.AbstractContentObject.connect_to_manager("add", self.add_content_object_with_new_type) content_objects.AbstractContentObject.connect_to_manager("remove", self.remove_content_objects_with_type) def __set_deleted_uris(self, ids): for event in ids: self._deleted_uris.append(event.subjects[0].uri) return self._deleted_uris def add_content_object_with_new_type(self, obj): for day in self.days: for instance in day.items: if instance._content_object_built: cls = content_objects.ContentObject.find_best_type_from_event(instance.event) if not isinstance(instance.content_object, cls) and instance.content_object: del instance.content_object instance.content_object = cls.create(instance.event) day.emit("update") def remove_content_objects_with_type(self, obj): for day in self.days: for instance in day.items: if instance._content_object_built: if isinstance(instance.content_object, obj) and instance.content_object: instance.content_object = content_objects.ContentObject.new_from_event(instance.event) day.emit("update") @DoEmit("update") def add_day(self, key, day): self._days[key] = day self._day_connections[key] = day.connect("update", lambda *args: self.emit("update")) def get_event_from_id(self, id_): struct = ContentStruct(id_) date = datetime.date.fromtimestamp(int(struct.event.timestamp)/1000) if date in self.dates: nstruct = self[date][id_] nstruct.event = struct.event del struct return nstruct else: day = Day(date) self.add_day(date, day) day._items[id_] = struct return struct def __getitem__(self, key): if isinstance(key, datetime.date): # Return day from date try: return self._days[key] except KeyError: day = Day(key) self.add_day(key, day) return day elif isinstance(key, int): # Return event id for date, obj in self._days.iteritems(): if obj.has_id(id): return obj[id] raise KeyError("%s Not found" % key) def __len__(self): i = 0 for item in self._days.itervalues(): i+=len(item) return i def request_last_n_days_events(self, n=90, func=None): """ Find the events for 'n' days and packs them into the store Optionally calls func upon completion """ subject = Subject() subject.uri = "!application://*" event_templates = ( Event.new_for_values(interpretation=Interpretation.ACCESS_EVENT.uri, subjects=[subject]), Event.new_for_values(interpretation=Interpretation.MODIFY_EVENT.uri, subjects=[subject]), Event.new_for_values(interpretation=Interpretation.CREATE_EVENT.uri, subjects=[subject]), Event.new_for_values(interpretation=Interpretation.RECEIVE_EVENT.uri, subjects=[subject]), Event.new_for_values(actor="!application://activity-log-manager.desktop") ) def callback(events): def _thread_fn(events): event_chunks = [] chunk = [] for i, event in enumerate(events): chunk.append(event) if i%20 == 0: event_chunks.append(chunk) chunk = [] map(self.add_events, event_chunks) if func: func() return False thread = threading.Thread(target=_thread_fn, args=(events,)) thread.start() end = time.time() - 3*86400 start = end - n*86400 if n >= 60: inc = (end - start)/(n/30) for i in range(n/30): a = end - (inc*(i+1)) + 1 b = end - (inc*(i)) CLIENT.find_events_for_templates( event_templates, callback, [a*1000, b*1000], num_events=50000, storage_state=StorageState.Available) else: CLIENT.find_events_for_templates( event_templates, callback, [start*1000, end*1000], num_events=50000, storage_state=StorageState.Available) return False def __add_event(self, event, overwrite): date = datetime.date.fromtimestamp(int(event.timestamp)/1000) day = self[date] day._insert_event(event, overwrite) def __add_events(self, events, overwrite): for event in events: self.__add_event(event, overwrite) def add_events(self, events, overwrite=True, idle=True): if idle: def _idle_add(events, overwrite): # Use _insert_event to avoid update signals self.__add_events(events, overwrite) return False gobject.idle_add(_idle_add, events, overwrite) else: self.__add_events(events, overwrite) def search_store_using_matching_function(self, func, date=None): matches = [] items = self.loaded_items if not date else self[date].items for item in items: if func(item): matches.append(item) return matches def search_using_zeitgeist_fts(self, text, event_templates=None): if not external.FTS: return [] events = external.FTS.search(text, event_templates if event_templates else []) ids = [int(event.id) for event in events] results = [] for id_ in ids: try: event = self.get_event_from_id(id_) results.append(event) except KeyError as e: pass return results @property def fts_search_enabled(self): # Disabled FTS search until it is further refined if external.FTS: return True return False gobject.type_register(Day) gobject.type_register(Store) # Init STORE = Store() external.STORE = STORE gnome-activity-journal-0.8.0/src/config.py0000644000175000017500000002326711610343255020070 0ustar rainctrainct#! /usr/bin/env python # -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2009-2010 Seif Lotfy # Copyright © 2009-2010 Siegfried Gevatter # Copyright © 2007 Alex Graveley # Copyright © 2010 Markus Korn # Copyright © 2010 Randal Barlow # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from __future__ import with_statement import cPickle import gettext import gobject import os import sys import urllib from xdg import BaseDirectory try: from fungtk.quickconf import QuickConf except ImportError: from quickconf import QuickConf from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation, \ ResultType # Legacy issues INTERPRETATION_UNKNOWN = "" # "http://zeitgeist-project.com/schema/1.0/core#UnknownInterpretation" MANIFESTATION_UNKNOWN = "" # "http://zeitgeist-project.com/schema/1.0/core#UnknownManifestation" INTERPRETATION_NOTE = "aj://note" INTERPRETATION_VCS = "aj://vcs" #version control system # Installation details BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) DATA_PATH = os.path.join(BASE_PATH, "data") VERSION = "0.8.0" GETTEXT_PATH = os.path.join(BASE_PATH, "../locale") USER_DATA_PATH = BaseDirectory.save_data_path("gnome-activity-journal") PLUGIN_PATH = os.path.join(BASE_PATH, "src/plugins") if not os.path.exists(PLUGIN_PATH) or not os.path.isdir(PLUGIN_PATH): PLUGIN_PATH = None USER_PLUGIN_PATH = os.path.join(USER_DATA_PATH, "plugins") if not os.path.exists(USER_PLUGIN_PATH) or not os.path.isdir(USER_PLUGIN_PATH): USER_PLUGIN_PATH = None settings = QuickConf("/apps/gnome-activity-journal") def _get_path(path): return os.path.join(BASE_PATH, path) def get_data_path(path=None): return os.path.join(DATA_PATH, path) if path else DATA_PATH def get_icon_path(path): for basepath in (DATA_PATH, "/usr/share/", "/usr/local/share", os.path.expanduser("~/.local/share")): newpath = os.path.join(basepath, "icons", path) if os.path.exists(newpath): return newpath return None def event_exists(uri): # TODO: Move this into Zeitgeist's datamodel.py return not uri.startswith("file://") or os.path.exists( urllib.unquote(str(uri[7:]))) # When running from Bazaar, give priority to local translations if os.path.isdir(_get_path("build/mo")): GETTEXT_PATH = _get_path("build/mo") class Bookmarker(gobject.GObject): __gsignals__ = { "reload" : (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) } # PUBLIC! bookmarks = [] def __init__(self): gobject.GObject.__init__(self) self.bookmarks_file = os.path.join(USER_DATA_PATH, "bookmarks.pickled") self._load() def _load(self): if os.path.isfile(self.bookmarks_file): try: with open(self.bookmarks_file) as f: self.bookmarks = cPickle.load(f) removable = [] for bookmark in self.bookmarks: if not event_exists(bookmark): removable.append(bookmark) for uri in removable: self.bookmarks.remove(uri) except Exception: print "Pin database is corrupt." def _save(self): with open(self.bookmarks_file, "w") as f: cPickle.dump(self.bookmarks, f) def bookmark(self, uri): if not uri in self.bookmarks and event_exists(uri): self.bookmarks.append(uri) self._save() self.emit("reload", self.bookmarks) def unbookmark(self, uri): if uri in self.bookmarks: self.bookmarks.remove(uri) self._save() self.emit("reload", self.bookmarks) def is_bookmarked(self, uri): return uri in self.bookmarks class Source(object): """A source which is used for category creation and verb/description storage for a given interpretation""" def __init__(self, interpretation, icon, desc_sing, desc_pl): if not isinstance(interpretation, str): self.name = interpretation.name else: self.name = interpretation self.icon = icon self._desc_sing = desc_sing self._desc_pl = desc_pl def group_label(self, num): if num == 1: return gettext.gettext(self._desc_sing) else: return gettext.gettext(self._desc_pl) class PluginManager(object): """ Loads a module and calls the module's activate(client, store, window) function Where: client is a zeitgeist client store is a the backing Store which controls journal window is the Journal window All plugins must have: func activate(client, store, window): build up when the plugin is enabled func deactivate(client, store, window): tear down when the plugin is disabled str __plugin_name__: plugin name str __description__: description of the plugin """ plugin_settings = QuickConf("/apps/gnome-activity-journal/plugins") def __init__(self, client, store, window): self.plugins = {} self.client = client self.store = store self.window = window # Base plugins self.load_path(PLUGIN_PATH) self.load_path(USER_PLUGIN_PATH) def load_path(self, path): if path: sys.path.append(path) plugs = [] for module_file in os.listdir(path): if module_file.endswith(".py") and module_file != "__init__.py": modname = module_file.replace(".py", "").replace("-", "_") plugs.append(modname) self.get_plugins(plugs, level=0) def get_plugins(self, plugin_names, prefix="", level=-1): plugs = self.import_plugins(plugin_names, prefix=prefix, level=level) self.load_plugins(plugs) def import_plugins(self, plugs, prefix="", level=-1): plugins = [] for plugin_name in plugs: try: plugin_module = __import__(prefix + plugin_name, level=level, fromlist=[plugin_name]) plugins.append((plugin_name, plugin_module)) self.plugins[plugin_name] = plugin_module # print plugin_module.__plugin_name__ + " has been imported" except Exception, e: print " Importing %s failed." % plugin_name, e return plugins def load_plugins(self, plugins): for plugin_name, plugin_module in plugins: try: state = self.plugin_settings.get(plugin_name, False) if not state: continue # If the plugin is not True it will not be loaded self.activate(plugin_module) except Exception, e: print "Loading %s failed." % plugin_name, e def __get_plugin_from_name(self, plugin=None, name=None): if not plugin: plugin = self.plugins[name] elif not plugin and not name: raise TypeError("You must pass either a plugin or a plugin_name") return plugin def activate(self, plugin=None, name=None): plugin = self.__get_plugin_from_name(plugin, name) plugin.activate(self.client, self.store, self.window) print "Activating %s" % plugin.__plugin_name__ def deactivate(self, plugin=None, name=None): plugin = self.__get_plugin_from_name(plugin, name) plugin.deactivate(self.client, self.store, self.window) print "Deactivating %s" % plugin.__plugin_name__ # Singletons and constants bookmarker = Bookmarker() SUPPORTED_SOURCES = { # TODO: Move this into Zeitgeist's library, implemented properly Interpretation.VIDEO.uri: Source(Interpretation.VIDEO, "gnome-mime-video", _("Worked with a Video"), _("Worked with Videos")), Interpretation.AUDIO.uri: Source(Interpretation.AUDIO, "gnome-mime-audio", _("Worked with Audio"), _("Worked with Audio")), Interpretation.IMAGE.uri: Source(Interpretation.IMAGE, "image", _("Worked with an Image"), _("Worked with Images")), Interpretation.DOCUMENT.uri: Source(Interpretation.DOCUMENT, "gnome-word", _("Edited or Read Document"), _("Edited or Read Documents")), Interpretation.SOURCE_CODE.uri: Source(Interpretation.SOURCE_CODE, "applications-development", _("Edited or Read Code"), _("Edited or Read Code")), Interpretation.IMMESSAGE.uri: Source(Interpretation.IMMESSAGE, "applications-internet", _("Conversation"), _("Conversations")), Interpretation.WEBSITE.uri: Source(Interpretation.WEBSITE, "gnome-web-browser", _("Visited Website"), _("Visited Websites")), Interpretation.EMAIL.uri: Source(Interpretation.EMAIL, "applications-internet", _("Email"), _("Emails")), Interpretation.TODO.uri: Source(Interpretation.TODO, "applications-office", _("Todo"), _("Todos")), INTERPRETATION_UNKNOWN: Source("Unknown", "applications-other", _("Other Activity"), _("Other Activities")), INTERPRETATION_NOTE: Source("aj://note", "tomboy", _("Edited or Read Note"), _("Edited or Read Notes")), INTERPRETATION_VCS: Source("aj://vcs", "bzr-icon-64", _("Software Development"), _("Software Developments")) } gnome-activity-journal-0.8.0/src/common.py0000644000175000017500000010725311610335777020123 0ustar rainctrainct# -.- coding: utf-8 -.- # # GNOME Activity Journal # # Copyright © 2010 Randal Barlow # Copyright © 2010 Siegfried Gevatter # Copyright © 2010 Markus Korn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Common Functions and classes which are used to create the alternative views, and handle colors, pixbufs, and text """ import cairo import collections import gobject import gettext import gio import gnome.ui import glib import gtk import os import pango import pangocairo import time import math import operator import subprocess import tempfile import urllib import zipfile try: import pygments except ImportError: pygments = None else: from pygments.lexers import get_lexer_for_filename, get_lexer_for_mimetype from pygments import highlight from pygments.formatters import ImageFormatter try: import chardet except ImportError: chardet = None from config import get_data_path, get_icon_path, INTERPRETATION_UNKNOWN, MANIFESTATION_UNKNOWN from zeitgeist.datamodel import Interpretation, Event, Subject THUMBS = collections.defaultdict(dict) ICONS = collections.defaultdict(dict) ICON_SIZES = SIZE_NORMAL, SIZE_LARGE = ((128, 128), (256, 256)) # Thumbview and Timelineview sizes SIZE_THUMBVIEW = [(48, 36), (96, 72), (150, 108), (256, 192)] SIZE_TIMELINEVIEW = [(16,12), (32, 24), (64, 48), (128, 96)] SIZE_TEXT_TIMELINEVIEW = ["small", "medium", "large", "x-large"] SIZE_TEXT_THUMBVIEW = ["x-small", "small", "large", "xx-large"] THUMBNAIL_FACTORIES = { SIZE_NORMAL: gnome.ui.ThumbnailFactory("normal"), SIZE_LARGE: gnome.ui.ThumbnailFactory("large") } ICON_THEME = gtk.icon_theme_get_default() #FIXME i know it's ugly. Btw this is only a temp solution. It will be removed # when we'll revamp the Multiview view.----sorry----cando IN_ERASE_MODE = False # Caches desktop files DESKTOP_FILES = {} DESKTOP_FILE_PATHS = [] try: desktop_file_paths = os.environ["XDG_DATA_DIRS"].split(":") for path in desktop_file_paths: if path.endswith("/"): DESKTOP_FILE_PATHS.append(path + "applications/") else: DESKTOP_FILE_PATHS.append(path + "/applications/") except KeyError:pass # Placeholder pixbufs for common sizes PLACEHOLDER_PIXBUFFS = { 24 : gtk.gdk.pixbuf_new_from_file_at_size(get_icon_path("hicolor/scalable/apps/gnome-activity-journal.svg"), 24, 24), 16 : gtk.gdk.pixbuf_new_from_file_at_size(get_icon_path("hicolor/scalable/apps/gnome-activity-journal.svg"), 16, 16) } # Color magic TANGOCOLORS = [ (252/255.0, 234/255.0, 79/255.0),#0 (237/255.0, 212/255.0, 0/255.0), (196/255.0, 160/255.0, 0/255.0), (252/255.0, 175/255.0, 62/255.0),#3 (245/255.0, 121/255.0, 0/255.0), (206/255.0, 92/255.0, 0/255.0), (233/255.0, 185/255.0, 110/255.0),#6 (193/255.0, 125/255.0, 17/255.0), (143/255.0, 89/255.0, 02/255.0), (138/255.0, 226/255.0, 52/255.0),#9 (115/255.0, 210/255.0, 22/255.0), ( 78/255.0, 154/255.0, 06/255.0), (114/255.0, 159/255.0, 207/255.0),#12 ( 52/255.0, 101/255.0, 164/255.0), ( 32/255.0, 74/255.0, 135/255.0), (173/255.0, 127/255.0, 168/255.0),#15 (117/255.0, 80/255.0, 123/255.0), ( 92/255.0, 53/255.0, 102/255.0), (239/255.0, 41/255.0, 41/255.0),#18 (204/255.0, 0/255.0, 0/255.0), (164/255.0, 0/255.0, 0/255.0), (136/255.0, 138/255.0, 133/255.0),#21 ( 85/255.0, 87/255.0, 83/255.0), ( 46/255.0, 52/255.0, 54/255.0), ] FILETYPES = { Interpretation.VIDEO.uri : 0, Interpretation.AUDIO.uri : 3, Interpretation.DOCUMENT.uri : 12, Interpretation.IMAGE.uri : 15, Interpretation.SOURCE_CODE.uri : 12, INTERPRETATION_UNKNOWN : 21, Interpretation.IMMESSAGE.uri : 21, Interpretation.EMAIL.uri : 21 } FILETYPESNAMES = { Interpretation.VIDEO.uri : _("Video"), Interpretation.AUDIO.uri : _("Music"), Interpretation.DOCUMENT.uri : _("Document"), Interpretation.IMAGE.uri : _("Image"), Interpretation.SOURCE_CODE.uri : _("Source Code"), INTERPRETATION_UNKNOWN : _("Unknown"), Interpretation.IMMESSAGE.uri : _("IM Message"), Interpretation.EMAIL.uri :_("Email"), } INTERPRETATION_PARENTS = { Interpretation.DOCUMENT.uri : Interpretation.DOCUMENT.uri, Interpretation.TEXT_DOCUMENT.uri : Interpretation.DOCUMENT.uri, Interpretation.PAGINATED_TEXT_DOCUMENT.uri : Interpretation.DOCUMENT.uri, Interpretation.RASTER_IMAGE.uri : Interpretation.IMAGE.uri, Interpretation.VECTOR_IMAGE.uri : Interpretation.IMAGE.uri, Interpretation.IMAGE.uri : Interpretation.IMAGE.uri, Interpretation.AUDIO.uri : Interpretation.AUDIO.uri, Interpretation.MUSIC_PIECE.uri : Interpretation.MUSIC_PIECE.uri, } MEDIAINTERPRETATIONS = [ Interpretation.VIDEO.uri, Interpretation.IMAGE.uri, ] def get_file_color(ftype, fmime): """Uses hashing to choose a shade from a hue in the color tuple above :param ftype: a :class:`Event ` :param fmime: a mime type string """ if ftype in FILETYPES.keys(): i = FILETYPES[ftype] l = int(math.fabs(hash(fmime))) % 3 return TANGOCOLORS[min(i+l, len(TANGOCOLORS)-1)] return (136/255.0, 138/255.0, 133/255.0) def get_text_or_uri(obj, ellipsize=True, molteplicity=False): if molteplicity and obj.molteplicity: text = obj.molteplicity_text else: text = unicode(obj.text.replace("&", "&")) if text.strip() == "": text = unicode(obj.uri.replace("&", "&")) text = urllib.unquote(text) if len(text) > 50 and ellipsize: text = text[:50] + "..." #ellipsize--it's ugly! return text ## ## Zeitgeist event helper functions def get_event_typename(event): """ :param event: a :class:`Event ` :returns: a plain text version of a interpretation """ try: return Interpretation[event.subjects[0].interpretation].display_name except KeyError: pass return FILETYPESNAMES[event.subjects[0].interpretation] ## # Cairo drawing functions def draw_frame(context, x, y, w, h): """ Draws a 2 pixel frame around a area defined by x, y, w, h using a cairo context :param context: a cairo context :param x: x position of the frame :param y: y position of the frame :param w: width of the frame :param h: height of the frame """ x, y = int(x)+0.5, int(y)+0.5 w, h = int(w), int(h) context.set_line_width(1) context.rectangle(x-1, y-1, w+2, h+2) context.set_source_rgba(0.5, 0.5, 0.5)#0.3, 0.3, 0.3) context.stroke() context.set_source_rgba(0.7, 0.7, 0.7) context.rectangle(x, y, w, h) context.stroke() context.set_source_rgba(0.4, 0.4, 0.4) context.rectangle(x+1, y+1, w-2, h-2) context.stroke() def draw_rounded_rectangle(context, x, y, w, h, r=5): """Draws a rounded rectangle :param context: a cairo context :param x: x position of the rectangle :param y: y position of the rectangle :param w: width of the rectangle :param h: height of the rectangle :param r: radius of the rectangle """ context.new_sub_path() context.arc(r+x, r+y, r, math.pi, 3 * math.pi /2) context.arc(w-r+x, r+y, r, 3 * math.pi / 2, 0) context.arc(w-r+x, h-r+y, r, 0, math.pi/2) context.arc(r+x, h-r+y, r, math.pi/2, math.pi) context.close_path() return context def draw_speech_bubble(context, layout, x, y, w, h): """ Draw a speech bubble at a position Arguments: :param context: a cairo context :param layout: a pango layout :param x: x position of the bubble :param y: y position of the bubble :param w: width of the bubble :param h: height of the bubble """ layout.set_width((w-10)*1024) layout.set_ellipsize(pango.ELLIPSIZE_MIDDLE) textw, texth = layout.get_pixel_size() context.new_path() context.move_to(x + 0.45*w, y+h*0.1 + 2) context.line_to(x + 0.5*w, y) context.line_to(x + 0.55*w, y+h*0.1 + 2) h = max(texth + 5, h) draw_rounded_rectangle(context, x, y+h*0.1, w, h, r = 5) context.close_path() context.set_line_width(2) context.set_source_rgb(168/255.0, 165/255.0, 134/255.0) context.stroke_preserve() context.set_source_rgb(253/255.0, 248/255.0, 202/255.0) context.fill() pcontext = pangocairo.CairoContext(context) pcontext.set_source_rgb(0, 0, 0) pcontext.move_to(x+5, y+5) pcontext.show_layout(layout) def draw_text(context, layout, markup, x, y, maxw = 0, color = (0.3, 0.3, 0.3)): """ Draw text using a cairo context and a pango layout Arguments: :param context: a cairo context :param layout: a pango layout :param x: x position of the bubble :param y: y position of the bubble :param maxw: the max text width in pixels :param color: a rgb tuple """ pcontext = pangocairo.CairoContext(context) layout.set_markup(markup) layout.set_ellipsize(pango.ELLIPSIZE_END) pcontext.set_source_rgba(*color) if maxw: layout.set_width(maxw*1024) pcontext.move_to(x, y) pcontext.show_layout(layout) def render_pixbuf(window, x, y, pixbuf, w, h, drawframe = True): """ Renders a pixbuf to be displayed on the cell Arguments: :param window: a gdk window :param x: x position :param y: y position :param drawframe: if true we draw a frame around the pixbuf """ context = window.cairo_create() context.save() context.rectangle(x, y, w, h) if drawframe: context.set_source_rgb(1, 1, 1) context.fill_preserve() context.set_source_pixbuf(pixbuf, x, y) context.clip() context.paint() context.restore(); if drawframe: # Draw a pretty frame draw_frame(context, x, y, w, h) def render_emblems(window, x, y, w, h, emblems): """ Renders emblems on the four corners of the rectangle Arguments: :param window: a gdk window :param x: x position :param y: y position :param w: the width of the rectangle :param y: the height of the rectangle :param emblems: a list of pixbufs """ # w = max(self.width, w) corners = [[x, y], [x+w, y], [x, y+h], [x+w-4, y+h-4]] context = window.cairo_create() for i in xrange(len(emblems)): i = i % len(emblems) pixbuf = emblems[i] if pixbuf: pbw, pbh = pixbuf.get_width()/2, pixbuf.get_height()/2 context.set_source_pixbuf(pixbuf, corners[i][0]-pbw, corners[i][1]-pbh) context.rectangle(corners[i][0]-pbw, corners[i][1]-pbh, pbw*2, pbh*2) context.fill() def render_molteplicity(window, x, y, w, h, molteplicity): """ Renders the molteplicity number on the top-right corner of the rectangle Arguments: :param window: a gdk window :param x: x position :param y: y position :param w: the width of the rectangle :param y: the height of the rectangle :param emblems: the molteplicity number """ radius = 10 center = [x + w, y ] context = window.cairo_create() context.set_source_rgb(0.9, 0.9, 0.8) context.arc(center[0], center[1], radius , 0, 2 * math.pi) context.fill_preserve() context.set_source_rgb(1, 0.5, 0.2) context.stroke() context.set_source_rgb(0.1, 0.1, 0.1) context.select_font_face("Serif", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) context.set_font_size(radius) x_bearing, y_bearing, width, height = context.text_extents(str(molteplicity))[:4] context.move_to(center[0] - width / 2 - x_bearing, center[1] - height / 2 - y_bearing) context.show_text(str(molteplicity)) ## ## Color functions def shade_gdk_color(color, shade): """ Shades a color by a fraction Arguments: :param color: a gdk color :param shade: fraction by which to shade the color :returns: a :class:`Color ` """ f = lambda num: min((num * shade, 65535.0)) if gtk.pygtk_version >= (2, 16, 0): color.red = f(color.red) color.green = f(color.green) color.blue = f(color.blue) else: red = int(f(color.red)) green = int(f(color.green)) blue = int(f(color.blue)) color = gtk.gdk.Color(red=red, green=green, blue=blue) return color def combine_gdk_color(color, fcolor): """ Combines a color with another color Arguments: :param color: a gdk color :param fcolor: a gdk color to combine with color :returns: a :class:`Color ` """ if gtk.pygtk_version >= (2, 16, 0): color.red = (2*color.red + fcolor.red)/3 color.green = (2*color.green + fcolor.green)/3 color.blue = (2*color.blue + fcolor.blue)/3 else: red = int(((2*color.red + fcolor.red)/3)) green = int(((2*color.green + fcolor.green)/3)) blue = int(((2*color.blue + fcolor.blue)/3)) color = gtk.gdk.Color(red=red, green=green, blue=blue) return color def get_gtk_rgba(style, palette, i, shade = 1, alpha = 1): """Takes a gtk style and returns a RGB tuple Arguments: :param style: a gtk_style object :param palette: a string representing the palette you want to pull a color from Example: "bg", "fg" :param shade: how much you want to shade the color :returns: a rgba tuple """ f = lambda num: (num/65535.0) * shade color = getattr(style, palette)[i] if isinstance(color, gtk.gdk.Color): red = f(color.red) green = f(color.green) blue = f(color.blue) return (min(red, 1), min(green, 1), min(blue, 1), alpha) else: raise TypeError("Not a valid gtk.gdk.Color") ## ## Pixbuff work ## def make_icon_frame(pixbuf, blend=False, border=1, color=0x000000ff): """creates a new Pixmap which contains 'pixbuf' with a border at given size around it.""" result = gtk.gdk.Pixbuf(pixbuf.get_colorspace(), True, pixbuf.get_bits_per_sample(), pixbuf.get_width(), pixbuf.get_height()) result.fill(color) if blend: pixbuf.composite(result, 0.5, 0.5, pixbuf.get_width(), pixbuf.get_height(), 0.5, 0.5, 0.5, 0.5, gtk.gdk.INTERP_NEAREST, 256) pixbuf.copy_area(border, border, pixbuf.get_width() - (border * 2), pixbuf.get_height() - (border * 2), result, border, border) return result def add_background(pixbuf, color=0xffffffff): """ adds a background with given color to the pixbuf and returns the result as new Pixbuf""" result = gtk.gdk.Pixbuf(pixbuf.get_colorspace(), True, pixbuf.get_bits_per_sample(), pixbuf.get_width(), pixbuf.get_height()) result.fill(color) pixbuf.composite(result, 0, 0, pixbuf.get_width(), pixbuf.get_height(), 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) return result def create_opendocument_thumb(path): """ extracts the thumbnail of an Opendocument document as pixbuf """ thumb = tempfile.NamedTemporaryFile() try: f = zipfile.ZipFile(path, mode="r") try: thumb.write(f.read("Thumbnails/thumbnail.png")) except KeyError: thumb.close() return None finally: f.close() except IOError: thumb.close() return None thumb.flush() thumb.seek(0) try: pixbuf = gtk.gdk.pixbuf_new_from_file(thumb.name) except glib.GError: return None # (LP: #650917) thumb.close() return add_background(pixbuf) def __crop_pixbuf(pixbuf, x, y, size=SIZE_LARGE): """ returns a part of the given pixbuf as new one """ result = gtk.gdk.Pixbuf(pixbuf.get_colorspace(), True, pixbuf.get_bits_per_sample(), size[0], size[1]) pixbuf.copy_area(x, y, x+size[0], y+size[1], result, 0, 0) return result def create_text_thumb(gio_file, size=None, threshold=2): """ tries to use pygments to get a thumbnail of a text file """ if pygments is None: return None try: lexer = get_lexer_for_mimetype(gio_file.mime_type) except pygments.util.ClassNotFound: lexer = get_lexer_for_mimetype("text/plain") if chardet: lexer.encoding = "chardet" thumb = tempfile.NamedTemporaryFile() formatter = ImageFormatter(font_name="DejaVu Sans Mono", line_numbers=False, font_size=10) # to speed things up only highlight the first 20 lines content = "\n".join(gio_file.get_content().split("\n")[:20]) try: content = highlight(content, lexer, formatter) except (UnicodeDecodeError, TypeError): # we can't create the pixbuf return None thumb.write(content) thumb.flush() thumb.seek(0) try: pixbuf = gtk.gdk.pixbuf_new_from_file(thumb.name) except glib.GError: return None # (LP: #743125) thumb.close() if size is not None: new_height = None new_width = None height = pixbuf.get_height() width = pixbuf.get_width() if width > threshold*size[0]: new_width = threshold*size[0] if height > threshold*size[1]: new_height = threshold*size[1] if new_height is not None or new_width is not None: pixbuf = __crop_pixbuf(pixbuf, 0, 0, (new_width or width, new_height or height)) return pixbuf def new_grayscale_pixbuf(pixbuf): """ Makes a pixbuf grayscale :param pixbuf: a :class:`Pixbuf ` :returns: a :class:`Pixbuf ` """ pixbuf2 = pixbuf.copy() pixbuf.saturate_and_pixelate(pixbuf2, 0.0, False) return pixbuf2 def crop_pixbuf(pixbuf, x, y, width, height): """ Crop a pixbuf Arguments: :param pixbuf: a :class:`Pixbuf ` :param x: the x position to crop from in the source :param y: the y position to crop from in the source :param width: crop width :param height: crop height :returns: a :class:`Pixbuf ` """ dest_pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, width, height) pixbuf.copy_area(x, y, width, height, dest_pixbuf, 0, 0) return dest_pixbuf def scale_to_fill(pixbuf, neww, newh): """ Scales/crops a new pixbuf to a width and height at best fit and returns it Arguments: :param pixbuf: a :class:`Pixbuf ` :param neww: new width of the new pixbuf :param newh: a new height of the new pixbuf :returns: a :class:`Pixbuf ` """ imagew, imageh = pixbuf.get_width(), pixbuf.get_height() if (imagew, imageh) != (neww, newh): imageratio = float(imagew) / float(imageh) newratio = float(neww) / float(newh) if imageratio > newratio: transformw = int(round(newh * imageratio)) pixbuf = pixbuf.scale_simple(transformw, newh, gtk.gdk.INTERP_BILINEAR) pixbuf = crop_pixbuf(pixbuf, 0, 0, neww, newh) elif imageratio < newratio: transformh = int(round(neww / imageratio)) pixbuf = pixbuf.scale_simple(neww, transformh, gtk.gdk.INTERP_BILINEAR) pixbuf = crop_pixbuf(pixbuf, 0, 0, neww, newh) else: pixbuf = pixbuf.scale_simple(neww, newh, gtk.gdk.INTERP_BILINEAR) return pixbuf class PixbufCache(dict): """ A pixbuf cache dict which stores, loads, and saves pixbufs to a cache and to the users filesystem. The naming scheme for thumb files is based on hash() There are huge flaws with this object. It does not have a ceiling, and it does not remove thumbnails from the file system. Essentially meaning the cache directory can grow forever. """ def __init__(self, *args, **kwargs): super(PixbufCache, self).__init__() def check_cache(self, uri): return self[uri] def get_buff(self, key): thumbpath = os.path.expanduser("~/.cache/GAJ/1_" + str(hash(key))) if os.path.exists(thumbpath): self[key] = (gtk.gdk.pixbuf_new_from_file(thumbpath), True) return self[key] return None def __getitem__(self, key): if self.has_key(key): return super(PixbufCache, self).__getitem__(key) return self.get_buff(key) def __setitem__(self, key, (pb, isthumb)): dir_ = os.path.expanduser("~/.cache/GAJ/") if not os.path.exists(os.path.expanduser("~/.cache/GAJ/")): os.makedirs(dir_) path = dir_ + str(hash(isthumb)) + "_" + str(hash(key)) if not os.path.exists(path): open(path, 'w').close() pb.save(path, "png") return super(PixbufCache, self).__setitem__(key, (pb, isthumb)) def get_pixbuf_from_uri(self, uri, size=SIZE_LARGE, iconscale=1): """ Returns a pixbuf and True if a thumbnail was found, else False. Uses the Pixbuf Cache for thumbnail compatible files. If the pixbuf is a thumb it is cached. Arguments: :param uri: a uri on the disk :param size: a size tuple from thumbfactory :param iconscale: a factor to reduce icons by (not thumbs) :param w: resulting width :param h: resulting height Warning! This function is in need of a serious clean up. :returns: a tuple containing a :class:`Pixbuf ` and bool which is True if a thumbnail was found """ try: cached = self.check_cache(uri) except gobject.GError: cached = None if cached: return cached gfile = GioFile.create(uri) thumb = True if gfile: if gfile.has_preview(): pb = gfile.get_thumbnail(size=size) if pb is None and "audio-x-generic" in gfile.icon_names: pb = gfile.get_icon(size=SIZE_NORMAL[0]) thumb = False else: pb = gfile.get_icon(size=SIZE_NORMAL[0]) thumb = False else: pb = None if not pb: pb = ICON_THEME.lookup_icon(gtk.STOCK_MISSING_IMAGE, SIZE_NORMAL[0], gtk.ICON_LOOKUP_FORCE_SVG).load_icon() thumb = False if thumb: if "audio-x-generic" in gfile.icon_names: thumb = False self[uri] = (pb, thumb) return pb, thumb PIXBUFCACHE = PixbufCache() def get_icon_for_name(name, size): """ return a icon for a name """ size = int(size) ICONS[(size, size)] if ICONS[(size, size)].has_key(name): return ICONS[(size, size)][name] info = ICON_THEME.lookup_icon(name, size, gtk.ICON_LOOKUP_USE_BUILTIN) if not info: return None location = info.get_filename() return get_icon_for_uri(location, size) def get_icon_for_uri(uri, size): if uri in ICONS[(size, size)]: return ICONS[(size, size)][uri] pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(uri, size, size) ICONS[(size, size)][uri] = pixbuf return pixbuf def get_icon_from_object_at_uri(uri, size): """ Returns a icon from a event at size :param uri: a uri string :param size: a int representing the size in pixels of the icon :returns: a :class:`Pixbuf ` """ gfile = GioFile.create(uri) if gfile: pb = gfile.get_icon(size=size) if pb: return pb return False ## ## Other useful methods ## def get_menu_item_with_stock_id_and_text(stock_id, text): item = gtk.ImageMenuItem(stock_id) label = item.get_children()[0] label.set_text(text) return item def is_command_available(command): """ Checks whether the given command is available, by looking for it in the PATH. This is useful for ensuring that optional dependencies on external applications are fulfilled. """ assert len(" a".split()) == 1, "No arguments are accepted in command" for directory in os.environ["PATH"].split(os.pathsep): if os.path.exists(os.path.join(directory, command)): return True return False def launch_command(command, arguments=None): """ Launches a program as an independent process. """ if not arguments: arguments = [] null = os.open(os.devnull, os.O_RDWR) subprocess.Popen([command] + arguments, stdout=null, stderr=null, close_fds=True) def launch_string_command(command): """ Launches a program as an independent from a string """ command = command.split(" ") null = os.open(os.devnull, os.O_RDWR) subprocess.Popen(command, stdout=null, stderr=null, close_fds=True) ## ## GioFile ## GIO_FILES = {} class GioFile(object): def __new__(classtype, *args, **kwargs): # Check to see if a __single exists already for this class # Compare class types instead of just looking for None so # that subclasses will create their own __single objects subj = args[0][1][0][0] if not GIO_FILES.has_key(subj): GIO_FILES[subj] = object.__new__(classtype) return GIO_FILES[subj] @classmethod def create(cls, path): """ save method to create a GioFile object, if a file does not exist None is returned""" try: if not GIO_FILES.has_key(path): GIO_FILES[path] = cls(path) return GIO_FILES[path] except gio.Error: return None def __init__(self, path): self._file_object = gio.File(path) self._file_info = self._file_object.query_info( "standard::content-type,standard::icon,time::modified") self._file_annotation = self._file_object.query_info("metadata::annotation") @property def mime_type(self): return self._file_info.get_attribute_string("standard::content-type") @property def mtime(self): return self._file_info.get_attribute_uint64("time::modified") @property def basename(self): return self._file_object.get_basename() @property def uri(self): return self._file_object.get_uri() def get_annotation(self): self.refresh_annotation() return self._file_annotation.get_attribute_as_string("metadata::annotation") def set_annotation(self, annotation): self._file_annotation.set_attribute_string("metadata::annotation", annotation) self._file_object.set_attributes_from_info(self._file_annotation) annotation = property(get_annotation, set_annotation) def get_content(self): f = open(self._file_object.get_path()) try: content = f.read() finally: f.close() return content @property def icon_names(self): try: return self._file_info.get_attribute_object("standard::icon").get_names() except AttributeError: return list() def get_thumbnail(self, size=SIZE_NORMAL, border=0): assert size in ICON_SIZES try: thumb = THUMBS[size][self.uri] except KeyError: factory = THUMBNAIL_FACTORIES[size] location = factory.lookup(self.uri, self.mtime) if location: thumb, mtime = THUMBS[size][self.uri] = \ (gtk.gdk.pixbuf_new_from_file(location), self.mtime) else: if factory.has_valid_failed_thumbnail(self.uri, self.mtime): thumb = THUMBS[size][self.uri] = None else: thumb = factory.generate_thumbnail(self.uri, self.mime_type) if thumb is None: # maybe we are able to use a custom thumbnailer here if filter(lambda name: "application-vnd.oasis.opendocument" in name, self.icon_names): thumb = create_opendocument_thumb(self._file_object.get_path()) elif "text-x-generic" in self.icon_names or "text-x-script" in self.icon_names: try: thumb = create_text_thumb(self, size, 1) except Exception: thumb = None elif "audio-x-generic" in self.icon_names: pass #FIXME #thumb = self.get_audio_cover(size) if thumb is None: factory.create_failed_thumbnail(self.uri, self.mtime) else: width, height = thumb.get_width(), thumb.get_height() if width > size[0] or height > size[1]: scale = min(float(size[0])/width, float(size[1])/height) thumb = gnome.ui.thumbnail_scale_down_pixbuf( thumb, int(scale*width), int(scale*height)) factory.save_thumbnail(thumb, self.uri, self.mtime) THUMBS[size][self.uri] = (thumb, self.mtime) else: if thumb is not None: if thumb[1] != self.mtime: del THUMBS[size][self.uri] return self.get_thumbnail(size, border) thumb = thumb[0] if thumb is not None and border: thumb = make_icon_frame(thumb, border=border, color=0x00000080) return thumb def get_audio_cover(self, size): """ Try to get a cover art in the folder of the song. It's s simple hack, but i think it's a good and quick compromise. """ pix = None dirname = os.path.dirname(self.event.subjects[0].uri) dirname = urllib.unquote(dirname)[7:] if not os.path.exists(dirname): return pix for f in os.listdir(dirname): if f.endswith(".jpg") or f.endswith(".jpeg"): path = dirname + os.sep + f pix = gtk.gdk.pixbuf_new_from_file(path) return pix return pix @property def thumbnail(self): return self.get_thumbnail() def get_monitor(self): return self._file_object.monitor_file() def refresh(self): self._file_info = self._file_object.query_info( "standard::content-type,standard::icon,time::modified") def refresh_annotation(self): self._file_annotation = self._file_object.query_info("metadata::annotation") def get_icon(self, size=24, can_thumb=False, border=0): icon = None if can_thumb: # let's try to find a thumbnail # we only allow thumbnails as icons for a few content types if self.thumb_icon_allowed(): if size < SIZE_NORMAL: thumb_size = SIZE_NORMAL else: thumb_size = SIZE_LARGE thumb = self.get_thumbnail(size=thumb_size) if thumb: s = float(size) width = thumb.get_width() height = thumb.get_height() scale = min(s/width, s/height) icon = thumb.scale_simple(int(width*scale), int(height*scale), gtk.gdk.INTERP_NEAREST) if icon is None: try: return ICONS[size][self.uri] except KeyError: for name in self.icon_names: info = ICON_THEME.lookup_icon(name, size, gtk.ICON_LOOKUP_USE_BUILTIN) if info is None: continue location = info.get_filename() if not location: continue # (LP: #722227) icon = gtk.gdk.pixbuf_new_from_file_at_size(location, size, size) if icon: break ICONS[size][self.uri] = icon if icon is not None and border: icon = make_icon_frame(icon, border=border, color=0x00000080) return icon @property def icon(self): return self.get_icon() def launch(self): appinfo = gio.app_info_get_default_for_type(self.mime_type, False) appinfo.launch([self._file_object,], None) def has_preview(self): icon_names = self.icon_names is_opendocument = filter(lambda name: "application-vnd.oasis.opendocument" in name, icon_names) return "video-x-generic" in icon_names \ or "image-x-generic" in icon_names \ or "audio-x-generic" in icon_names \ or "application-pdf" in icon_names \ or (("text-x-generic" in icon_names or "text-x-script" in icon_names) and pygments is not None) \ or is_opendocument def thumb_icon_allowed(self): icon_names = self.icon_names is_opendocument = filter(lambda name: "application-vnd.oasis.opendocument" in name, icon_names) return "video-x-generic" in icon_names \ or "image-x-generic" in icon_names \ or "application-pdf" in icon_names \ or is_opendocument def __eq__(self, other): if not isinstance(other, GioFile): return False return self.uri == other.uri class DayParts: # TODO: In a future, I'd be cool to make the day partitions configurable. # This includes redefining what Morning/Afternoon/etc. are, but also # changing the categories entirely (eg. "Work", "Lunch time", etc.). # For this get_day_parts and other methods should take a timestamp of # the relevant day so they can account for weekends not having "Work", etc. TIMELABELS = [_("Morning"), _("Afternoon"), _("Evening")] CHANGEHOURS = [0, 12, 18] @classmethod def _local_minimum(cls, hour): for i in xrange(1, len(cls.CHANGEHOURS)): if hour < cls.CHANGEHOURS[i]: return i - 1 return len(cls.CHANGEHOURS) - 1 @classmethod def get_day_parts(cls): return cls.TIMELABELS @classmethod def get_day_part_for_item(cls, item): t = time.localtime(int(item.event.timestamp) / 1000) return cls._local_minimum(t.tm_hour) @classmethod def get_day_part_range_for_item(cls, item): start = list(time.localtime(int(item.event.timestamp) / 1000)) i = cls._local_minimum(start[3]) start[3] = cls.CHANGEHOURS[i] # Reset hour start[4] = start[5] = 0 # Reset minutes and seconds end = list(start) end[3] = cls.CHANGEHOURS[i+1] if len(cls.CHANGEHOURS) > (i + 1) else 23 end[4] = end[5] = 59 return time.mktime(start) * 1000, time.mktime(end) * 1000 def ignore_exceptions(return_value_on_failure=None): def wrap(f): def safe_method(*args, **kwargs): try: return f(*args, **kwargs) except Exception, e: from traceback import print_exc print '\n --- Error running %s ---' % f.__name__ print_exc() print return return_value_on_failure return safe_method return wrap gnome-activity-journal-0.8.0/extension/0000755000175000017500000000000011610346154017465 5ustar rainctrainctgnome-activity-journal-0.8.0/extension/gnome_activity_journal.py0000644000175000017500000000436411431055046024617 0ustar rainctrainct# -.- coding: utf-8 -.- # Zeitgeist - GNOME Activity Journal Extension # # Copyright © 2010 Siegfried-Angel Gevatter Pujals # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . import time import dbus import logging from _zeitgeist.engine import constants from _zeitgeist.engine.extension import Extension #from _zeitgeist.engine.sql import get_default_cursor GAJ_DBUS_OBJECT_PATH = "/org/gnome/zeitgeist/journal/activity" log = logging.getLogger("zeitgeist.activity_journal") class ActivityJournalExtension(Extension, dbus.service.Object): """ This is a specialized extension which adds a new :const:`GetHistogramData` method to Zeitgeist for use by GNOME Activity Journal. """ PUBLIC_METHODS = ["get_histogram_data"] def __init__ (self, engine): Extension.__init__(self, engine) dbus.service.Object.__init__(self, dbus.SessionBus(), GAJ_DBUS_OBJECT_PATH) self._engine = engine self._cursor = engine._cursor # PUBLIC def get_histogram_data(self): """ FIXME: Please write me! """ sql = """SELECT strftime('%s', datetime(timestamp/1000, 'unixepoch'), 'start of day') AS daystamp, COUNT(*) FROM event GROUP BY daystamp ORDER BY daystamp DESC""" return self._cursor.execute(sql).fetchall() @dbus.service.method(constants.DBUS_INTERFACE, in_signature="", out_signature="a(tu)") def GetHistogramData(self): """ FIXME: I do stuff. """ return self.get_histogram_data() gnome-activity-journal-0.8.0/po/0000755000175000017500000000000011610346154016067 5ustar rainctrainctgnome-activity-journal-0.8.0/po/fr.po0000644000175000017500000002664411610336456017056 0ustar rainctrainctmsgid "" msgstr "" "Project-Id-Version: GNOME Activity Journal\n" "Report-Msgid-Bugs-To: zeitgeist@lists.launchpad.net\n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-29 12:10+0000\n" "Last-Translator: Nicolas Delvaux \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2011-01-30 05:13+0000\n" "X-Generator: Launchpad (build 12177)\n" "X-Poedit-Language: French\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "afficher des informations de débogage supplémentaires" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERREUR" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Connexion à Zeitgeist impossible :" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Aujourd'hui" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Hier" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Aller à Aujourd'Hui" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Aller au jour précédent " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Aller au jour suivant" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Effectuez vos recherches ici..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Lecture en cours..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Préférences" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "À propos" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Retirer l'épingle" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Ajouter une épingle" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Supprimer l'élément du journal" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Supprimer tout les évenements avec cette URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "En savoir plus" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Envoyer à..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Utilisé avec" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Exécuter ce sujet" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Supprimer ce sujet" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Greffons actifs :" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Greffons" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Afficher une icone dans la zone de notification." #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Paramètres" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Chargement du journal..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "du %s au %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Journal d'activités" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} avec {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} avec {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponible" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Déconnecté(e)" #: ../src/content_objects.py:581 msgid "Away" msgstr "Absent(e)" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Occupé(e)" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "avec" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Suivi du temps" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} depuis {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} depuis {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Fichiers joints)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Note\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "élément" msgstr[1] "éléments" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Vidéo consultée" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Vidéos consultées" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Fichiers audio consultés" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Image consultée" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Images consultées" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Document lu ou édité" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Documents lus ou édités" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Code lu ou édité" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversation" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversations" #: ../src/config.py:244 msgid "Visited Website" msgstr "Site web visité" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Sites web visités" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-mails" #: ../src/config.py:246 msgid "Todo" msgstr "À faire" #: ../src/config.py:246 msgid "Todos" msgstr "Tâches à effectuer" #: ../src/config.py:247 msgid "Other Activity" msgstr "Autre activité" #: ../src/config.py:247 msgid "Other Activities" msgstr "Autres activités" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Note lue ou éditée" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Notes lues ou éditées" #: ../src/config.py:249 msgid "Software Development" msgstr "Dévelopement logiciel" #: ../src/config.py:249 msgid "Software Developments" msgstr "Développement logiciel" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Montrer/Cacher JAG" #: ../src/common.py:144 msgid "Video" msgstr "Vidéo" #: ../src/common.py:145 msgid "Music" msgstr "Musique" #: ../src/common.py:146 msgid "Document" msgstr "Document" #: ../src/common.py:147 msgid "Image" msgstr "Image" #: ../src/common.py:148 msgid "Source Code" msgstr "Code source" #: ../src/common.py:149 msgid "Unknown" msgstr "Inconnu" #: ../src/common.py:150 msgid "IM Message" msgstr "Message instantané" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Matinée" #: ../src/common.py:936 msgid "Afternoon" msgstr "Après-midi" #: ../src/common.py:936 msgid "Evening" msgstr "Soirée" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Basculer en affichage multiple" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Nom : " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Type MIME : %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Basculer en affichage aperçu" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Basculer en vue temporelle" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Éléments épinglés" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Parcourez un historique de vos activités et retrouvez facilement vos " "fichiers, contacts, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accessibilité" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Autoriser les miniatures comme icônes" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Nombre de jours affichés" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Hauteur de fenêtre personnalisée, en pixels (redémarrage requis). Ne peut " "être plus que la résolution de l'écran." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Largeur de fenêtre personnalisée, en pixels (redémarrage requis). Ne peut " "être plus que la résolution de l'écran." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Le nombre de jours à afficher en même temps." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Si les options d'accessibilité devraient être activées (redémarrage requis)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Autoriser l'affichage de miniatures à côté des activités (redémarrage " "requis). Dans le cas contraire, les icônes standard seront utilisées." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Hauteur de fenêtre" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Largeur de fenêtre" #~ msgid "Go Back in Time" #~ msgstr "Jours précedents" #~ msgid "Look into the Future" #~ msgstr "Jours suivants" #~ msgid "Jump to Today" #~ msgstr "Se déplacer vers aujourd'hui" #~ msgid "Pinned items" #~ msgstr "Élements épinglés" #~ msgid "Click today to return to today" #~ msgstr "Cliquez pour revenir vers aujourd'hui" #~ msgid "Pin to Today" #~ msgstr "Épingler à aujourd'hui" #~ msgid "Powered by Zeitgeist" #~ msgstr "Fonctionne avec Zeitgeist" #~ msgid "Tags" #~ msgstr "Étiquettes" #~ msgid "Search" #~ msgstr "Rechercher" gnome-activity-journal-0.8.0/po/sq.po0000644000175000017500000002525011610336456017062 0ustar rainctrainct# Albanian translation for gnome-activity-journal # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-27 10:24+0000\n" "Last-Translator: Lulzim \n" "Language-Team: Albanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-28 05:02+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "GABIM" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "E pamundur për t'u lidhur me Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Sot" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Dje" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Shko tek Sot" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Shko në ditën e mëparshme " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Shko në ditën e ardhshme" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Shtyp këtu për të kërkuar..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferencat" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Informacione" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Hiq kapësën" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Shto kapës" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Fshij artikullin nga ditari" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Fshij të gjitha ngjarjet me këtë URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Më Tepër Informacion" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Dërgo Tek..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Përdorur Me" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Lësho këtë subjekt" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Fshije këtë subjekt" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Shtojcat Aktive:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Shtojca" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Konfiguracioni" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Duke Ngarkuar Ditarin..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s tek %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Ditari i aktiviteteve" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} me {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} me {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "I Disponueshëm" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Jashtë Linje" #: ../src/content_objects.py:581 msgid "Away" msgstr "I Larguar" #: ../src/content_objects.py:582 msgid "Busy" msgstr "I Zënë" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "me" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Ndjekës kohe" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} nga {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} nga {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Shënim\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "element" msgstr[1] "elementët" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Punuar me nje Video" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Punuar me Video" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Punuar me zë" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Punuar me një imazh" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Punuar me imazhe" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Dokument i ndryshuar ose i lexuar" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Dokumenta të ndryshuar ose të lexuar" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Kod i ndryshuar ose i lexuar" #: ../src/config.py:243 msgid "Conversation" msgstr "Bisedë" #: ../src/config.py:243 msgid "Conversations" msgstr "Bisedat" #: ../src/config.py:244 msgid "Visited Website" msgstr "faqe Interneti e Vizituar" #: ../src/config.py:244 msgid "Visited Websites" msgstr "faqe Interneti të Vizituara" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "Email-e" #: ../src/config.py:246 msgid "Todo" msgstr "Për tu bërë" #: ../src/config.py:246 msgid "Todos" msgstr "Për tu bërë" #: ../src/config.py:247 msgid "Other Activity" msgstr "Aktivitet tjetër" #: ../src/config.py:247 msgid "Other Activities" msgstr "Aktivitete të tjera" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Shënim i ndryshuar ose i lexuar" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Shenime të ndryshuara ose te lexuara" #: ../src/config.py:249 msgid "Software Development" msgstr "Bërje Programi" #: ../src/config.py:249 msgid "Software Developments" msgstr "Bërje programesh" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "fsheh/Shfaq GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Muzikë" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Imazh" #: ../src/common.py:148 msgid "Source Code" msgstr "Kodi Burim" #: ../src/common.py:149 msgid "Unknown" msgstr "I Panjohur" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Mëngjes" #: ../src/common.py:936 msgid "Afternoon" msgstr "Mbrëmje" #: ../src/common.py:936 msgid "Evening" msgstr "Mbrëmje" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Emri: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Elementët e fiksuar" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Shfleto kronologjinë e veprimtarisë tuaj dhe gjej lehtësisht skedarë, " "adresa, etj." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Përdorshmëria" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Shuma e ditëve të dukshme" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Gjatësia për dritaren kryesore, në piksel (kerkon rinisje). Nuk mund të jetë " "më e madhe se madhësia e desktop-it." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Gjerësia për dritaren kryesore, në piksel (kerkon rinisje). Nuk mund të jetë " "më e madhe se madhësia e desktop-it." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Shuma e ditëve për tu shfaqur në të njëjtën kohë." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Nëse mundësitë e veçanta të aksesueshmërisë duhet të jenë të aktivizuara " "(kerkon rinisje)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Lartësia e dritares" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Gjerësia e dritares" gnome-activity-journal-0.8.0/po/vi.po0000644000175000017500000002502311610336456017053 0ustar rainctrainct# Vietnamese translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-12-21 13:10+0000\n" "Last-Translator: dat.a1k61 \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-01-27 04:53+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "hiển thị thêm thông tin gỡ lỗi" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "CÓ LỖI" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Không thể kết nối tới Zeitgeist" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Hôm nay" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Hôm qua" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Nhập vào đây để tìm kiếm..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Bỏ chú ý" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Xoá mục này khỏi Nhật ký" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s đến %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Nhật Ký Hoạt Động" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "mục" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Đã làm việc với một Phim" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Đã làm việc với các Phim" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Đã làm việc với tập tin Âm thanh" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Đã làm việc với một Hình ảnh" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Đã làm việc với các Hình ảnh" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Tài liệu đã chỉnh sửa hoặc đọc" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Các tài liệu đã chỉnh sửa hoặc đã đọc" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Đoạn mã đã chỉnh sửa hoặc đã đọc" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Hoạt động khác" #: ../src/config.py:247 msgid "Other Activities" msgstr "Các hoạt động khác" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Phim" #: ../src/common.py:145 msgid "Music" msgstr "Nhạc" #: ../src/common.py:146 msgid "Document" msgstr "Tài liệu" #: ../src/common.py:147 msgid "Image" msgstr "Hình ảnh" #: ../src/common.py:148 msgid "Source Code" msgstr "Mã Nguồn" #: ../src/common.py:149 msgid "Unknown" msgstr "Chưa xác định." #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Sáng" #: ../src/common.py:936 msgid "Afternoon" msgstr "Chiều" #: ../src/common.py:936 msgid "Evening" msgstr "Chiều/tối" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Duyệt nhật kí hoạt động của bạn theo thứ tự thời gian giúp dễ dàng tim kiếm " "tập tin và liên hệ..." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Khả năng truy cập" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Cho phép hình ảnh thu nhỏ như các biểu tượng" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Số lượng ngày hiển thị" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Tuỳ chọn độ cao của cửa sổ chính, theo điểm ảnh (cần phải khởi động lại). " "Không được phép lớn hơn kích thước của màn hình." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Tuỳ chọn độ rộng của cửa sổ chính, theo điểm ảnh (cần phải khởi động lại). " "Không được phép lớn hơn kích thước của màn hình." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Số lương ngày trong một lần hiển thị" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Độ cao cửa sổ" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Độ rộng cửa sổ" #~ msgid "Pinned items" #~ msgstr "Các mục chú ý" #~ msgid "Click today to return to today" #~ msgstr "Click vào \"hôm nay\" để trở lại ngày hôm nay" #~ msgid "Pin to Today" #~ msgstr "Chú ý cho Hôm nay" #, python-format #~ msgid "%s to today" #~ msgstr "%s đến hôm nay" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Bấm chuột trái để xem chi tiết thời gian" #~ msgid "Click to return multiday view" #~ msgstr "Bấm để xem nhiều ngày" #~ msgid "Most used with..." #~ msgstr "Thường dùng với..." gnome-activity-journal-0.8.0/po/ja.po0000644000175000017500000002116611610336456017033 0ustar rainctrainct# Japanese translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-07-26 12:10+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/pt_BR.po0000644000175000017500000003066611610336456017454 0ustar rainctrainct# Brazilian Portuguese translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-05-03 19:26+0000\n" "Last-Translator: Djavan Fagundes \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2011-05-04 04:47+0000\n" "X-Generator: Launchpad (build 12758)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "mostrar informações adicionais de depuração" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERRO" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Incapaz de se conectar ao Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Hoje" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Ontem" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Ir para Hoje" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Ir ao dia anterior " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Ir ao próximo dia" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Digite aqui para pesquisar..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Tocando..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferências" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Sobre" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Desafixar" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Fixar" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Apagar item do diário" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Apagar todos os itens com essa URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Mais informações" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Enviar para..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Usado com" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Iniciar este assunto" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Apagar este assunto" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Plug-ins ativos" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Plug-ins" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Mostrar ícone na bandeja do sistema" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Configuração" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Carregando diário..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s para %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Diário de atividades" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} com {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} com {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponível" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Desconectado" #: ../src/content_objects.py:581 msgid "Away" msgstr "Ausente" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Ocupado" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "com" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Registrador de tempo" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s anexos)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Nota\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "item" msgstr[1] "itens" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Trabalhou com um vídeo" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Trabalhou com vídeos" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Trabalhou com áudio" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Trabalhou com uma imagem" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Trabalhou com imagens" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Editou ou leu um documento" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Editou ou leu documentos" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Editou ou leu código" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversa" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversas" #: ../src/config.py:244 msgid "Visited Website" msgstr "Site visitado" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Sites visitados" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-mails" #: ../src/config.py:246 msgid "Todo" msgstr "Pendente" #: ../src/config.py:246 msgid "Todos" msgstr "Pendentes" #: ../src/config.py:247 msgid "Other Activity" msgstr "Outra atividade" #: ../src/config.py:247 msgid "Other Activities" msgstr "Outras atividades" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Editou ou leu nota" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Editou ou leu notas" #: ../src/config.py:249 msgid "Software Development" msgstr "Desenvolvimento de software" #: ../src/config.py:249 msgid "Software Developments" msgstr "Desenvolvimento de software" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Esconder/mostrar DAG" #: ../src/common.py:144 msgid "Video" msgstr "Vídeo" #: ../src/common.py:145 msgid "Music" msgstr "Música" #: ../src/common.py:146 msgid "Document" msgstr "Documento" #: ../src/common.py:147 msgid "Image" msgstr "Imagem" #: ../src/common.py:148 msgid "Source Code" msgstr "Código-fonte" #: ../src/common.py:149 msgid "Unknown" msgstr "Desconhecido" #: ../src/common.py:150 msgid "IM Message" msgstr "Mensagem instantânea" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Manhã" #: ../src/common.py:936 msgid "Afternoon" msgstr "Tarde" #: ../src/common.py:936 msgid "Evening" msgstr "Noite" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Mudar para multi-visão" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Nome: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Tipo MIME: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Mudar para visão-mínima" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Mudar para visão de linha-de-tempo" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Itens fixados" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Navegue em um registo cronológico de suas atividades e encontre facilmente " "arquivos, contatos, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Acessibilidade" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Permitir miniaturas como ícones" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Quantidade de dias visíveis" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Altura personalizada para a janela principal em pixels (requer " "reinicialização). Não pode ser maior que o tamanho da área de trabalho." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Largura personalizada para a janela principal em pixels (requer " "reinicialização). Não pode ser maior que o tamanho da área de trabalho." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "A quantidade de dias para mostrar de cada vez." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "As opções especiais de acessibilidade devem ser habilitadas (requer " "reinicialização)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "As miniaturas devem ser mostradas ao lado de cada atividade (requer " "reinicialização). Se não, apenas ícones genéricos de tipos-mime serão usados." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Altura da janela" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Largura da janela" #~ msgid "Click today to return to today" #~ msgstr "Clique em hoje para voltar para hoje" #, python-format #~ msgid "%s to today" #~ msgstr "%s até hoje" #~ msgid "Click to return multiday view" #~ msgstr "Clique para voltar à visão de múltiplos dias" #~ msgid "Most used with..." #~ msgstr "Mais usado com..." #~ msgid "Powered by Zeitgeist" #~ msgstr "Provido por Zeitgeist" #~ msgid "Right click for a thumbnail view" #~ msgstr "Clique com botão direito para uma visão de miniaturas" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Clique com botão esquerdo para uma visão detalhada da linha-do-tempo" #~ msgid "Pin to Today" #~ msgstr "Pregar em hoje" #~ msgid "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgstr "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgid "Actor" #~ msgstr "Ator" #~ msgid "Related Items" #~ msgstr "Itens relacionados" #~ msgid "Time" #~ msgstr "Hora" #~ msgid "Click to return to multiday view" #~ msgstr "Clique para voltar à visão de vários dias" #~ msgid "Manifestation" #~ msgstr "Manifestação" #~ msgid "Subject Interpretation" #~ msgstr "Interpretação do Assunto" #~ msgid "Interpretation" #~ msgstr "Interpretação" #~ msgid "Pinned items" #~ msgstr "Itens marcados" #~ msgid "Goto Today" #~ msgstr "Ir para hoje" #~ msgid "Tags" #~ msgstr "Etiquetas" #~ msgid "Search" #~ msgstr "Pesquisar" gnome-activity-journal-0.8.0/po/de.po0000644000175000017500000003071311610336456017027 0ustar rainctrainct# German translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-04-09 16:38+0000\n" "Last-Translator: Thoralf Backhaus \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-04-10 05:01+0000\n" "X-Generator: Launchpad (build 12735)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "zusätzliche Informationen zur Fehlerbehebung anzeigen" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "FEHLER" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Keine Verbindung zu Zeitgeist möglich" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Heute" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Gestern" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Zum heutigen Tag gehen" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Zum vorherigen Tag " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Einen Tag weiter" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Suchbegriff hier eingeben..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Wiedergabe..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Einstellungen" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Über" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Markierung entfernen" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Markierung hinzufügen" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Element aus dem Journal löschen" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Alle Ereignisse mit dieser Addresse löschen" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Weitere Informationen" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Senden an …" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Benutzt mit" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Dieses Element öffnen" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Dieses Element löschen" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Aktivierte Erweiterungen:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Erweiterungen" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Zeige Symbol im System Tray" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Einstellungen" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Lade Journal..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s bis %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Tagebuch über Aktivitäten" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} mit {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} mit {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Verfügbar" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Abgemeldet" #: ../src/content_objects.py:581 msgid "Away" msgstr "Abwesend" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Beschäftigt" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "mit" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Zeiterfassung" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} von {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} von {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Anhänge)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "Anmerkung" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "Element" msgstr[1] "Elemente" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Mit einem Video gearbeitet" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Mit Videos gearbeitet" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Mit einer Audiodatei gearbeitet" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Mit einem Bild gearbeitet" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Mit Bildern gearbeitet" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Ein Dokument gelesen oder bearbeitet" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Gelesene oder bearbeitete Dokumente" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Quellcode gelesen oder bearbeitet" #: ../src/config.py:243 msgid "Conversation" msgstr "Unterhaltung" #: ../src/config.py:243 msgid "Conversations" msgstr "Unterhaltungen" #: ../src/config.py:244 msgid "Visited Website" msgstr "Besuchte Webseite" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Besuchte Webseiten" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-Mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-Mails" #: ../src/config.py:246 msgid "Todo" msgstr "Offen" #: ../src/config.py:246 msgid "Todos" msgstr "Aufgaben" #: ../src/config.py:247 msgid "Other Activity" msgstr "Weitere Aktivität" #: ../src/config.py:247 msgid "Other Activities" msgstr "Weitere Aktivitäten" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Notiz bearbeitet oder gelesen" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Notizen bearbeitet oder gelesen" #: ../src/config.py:249 msgid "Software Development" msgstr "Programm-Entwicklung" #: ../src/config.py:249 msgid "Software Developments" msgstr "Programm-Entwicklungen" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Verstecke/Zeige GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Musik" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Bild" #: ../src/common.py:148 msgid "Source Code" msgstr "Quelltext" #: ../src/common.py:149 msgid "Unknown" msgstr "Unbekannt" #: ../src/common.py:150 msgid "IM Message" msgstr "IM Nachricht" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Vormittags" #: ../src/common.py:936 msgid "Afternoon" msgstr "Nachmittags" #: ../src/common.py:936 msgid "Evening" msgstr "Abends" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Zur Mehrfachansicht wechseln" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Name: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME Typ: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Zur Vorschaubild-Ansicht wechseln" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Zur Zeitstrahl-Ansicht wechseln" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Markierte Elemente" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Durchsuche eine chronologische Auflistung deiner Aktivitäten und finde so " "einfach Dateien, Kontakte und Sonstiges" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Eingabehilfen" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Vorschaubilder als Symbole zulassen" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Anzahl der sichtbaren Tage" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Angepasste Höhe für das Hauptfenster in Pixel (benötigt Neustart). Kann " "nicht mehr als die Desktopgröße betragen." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Angepasste Breite für das Hauptfenster in Pixel (benötigt Neustart). Kann " "nicht mehr als die Desktopgröße betragen." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Anzahl der Tage, die gleichzeitig angezeigt werden." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "Optionen für Barrierefreiheit aktivieren (benötigt Neustart)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Option um kleine Vorschaubilder neben jeder Aktivität anzuzeigen (benötigt " "Neustart). Wenn diese Option deaktiviert ist werden nur die Icons der " "Dateitypen genutzt." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Fensterhöhe" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Fensterbreite" #~ msgid "Pin to Today" #~ msgstr "An den heutigen Tag anhängen" #~ msgid "Click today to return to today" #~ msgstr "Den heutigen Tag anklicken, um zu diesem zurück zu kehren" #~ msgid "Pinned items" #~ msgstr "Markierte Elemente" #, python-format #~ msgid "%s to today" #~ msgstr "%s bis heute" #~ msgid "Most used with..." #~ msgstr "Am meisten verwendet mit..." #~ msgid "Powered by Zeitgeist" #~ msgstr "Powered by Zeitgeist" #~ msgid "Right click for a thumbnail view" #~ msgstr "Rechtsklick für die Ansicht in Minibildern" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Linksklick für die Ansicht in detailierter Zeitlinie" #~ msgid "Click to return multiday view" #~ msgstr "Klicken, um zur mehrtägigen Ansicht zurückzukehren" #~ msgid "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgstr "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgid "Subject Interpretation" #~ msgstr "Subjekt Interpretation" #~ msgid "Click to return to multiday view" #~ msgstr "Klicken um zu der mehrtägigen Ansicht zurückzukehren" #~ msgid "Interpretation" #~ msgstr "Interpretation" #~ msgid "Manifestation" #~ msgstr "Festlegung" #~ msgid "Time" #~ msgstr "Zeit" #~ msgid "Related Items" #~ msgstr "Ähnliche Einträge" #~ msgid "Actor" #~ msgstr "Teilnehmer" #~ msgid "Tags" #~ msgstr "Schlagwörter" gnome-activity-journal-0.8.0/po/sr.po0000644000175000017500000002130611610336456017061 0ustar rainctrainct# Serbian translation for gnome-activity-journal # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-06-11 08:08+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-06-12 04:59+0000\n" "X-Generator: Launchpad (build 13168)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/gnome-activity-journal.pot0000644000175000017500000002377511610336573023244 0ustar rainctrainct# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: zeitgeist@lists.launchpad.net\n" "POT-Creation-Date: 2011-07-16 18:34+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../src/content_objects.py:595 ../src/content_objects.py:597 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:596 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:607 msgid "Available" msgstr "" #: ../src/content_objects.py:608 msgid "Offline" msgstr "" #: ../src/content_objects.py:609 msgid "Away" msgstr "" #: ../src/content_objects.py:610 msgid "Busy" msgstr "" #: ../src/content_objects.py:643 ../src/content_objects.py:648 #: ../src/content_objects.py:653 msgid "with" msgstr "" #: ../src/content_objects.py:678 msgid "Surfed in " msgstr "" #: ../src/content_objects.py:698 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:719 msgid "Chatted in " msgstr "" #: ../src/content_objects.py:778 ../src/content_objects.py:780 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:779 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:783 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:807 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:808 ../src/content_objects.py:809 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:827 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:828 ../src/content_objects.py:829 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/supporting_widgets.py:77 ../src/main.py:385 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:80 ../src/main.py:388 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:179 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:181 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:181 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:527 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:715 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:835 ../src/supporting_widgets.py:845 #: ../src/supporting_widgets.py:1624 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:844 msgid "About" msgstr "" #: ../src/supporting_widgets.py:846 msgid "Toggle Erase Mode" msgstr "" #: ../src/supporting_widgets.py:930 ../src/activity_widgets.py:570 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:931 ../src/supporting_widgets.py:1404 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:932 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:933 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:934 ../src/supporting_widgets.py:1504 #: ../src/supporting_widgets.py:1559 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:946 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1036 msgid "Delete items from Journal" msgstr "" #: ../src/supporting_widgets.py:1037 msgid "Show all grouped items" msgstr "" #: ../src/supporting_widgets.py:1399 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1401 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1407 ../src/supporting_widgets.py:1418 msgid "Edit Note" msgstr "" #: ../src/supporting_widgets.py:1634 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1642 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1647 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1654 msgid "Configuration" msgstr "" #: ../src/Indicator.py:41 ../src/Indicator.py:63 ../src/main.py:399 #: ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/Indicator.py:99 msgid "Hide/Show GAJ" msgstr "" #: ../src/Indicator.py:101 msgid "Start incognito mode (pause event logging)" msgstr "" #: ../src/Indicator.py:103 msgid "Resume event logging (exit incognito)" msgstr "" #: ../src/activity_widgets.py:118 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:630 ../src/activity_widgets.py:661 msgid "Notes" msgstr "" #: ../src/activity_widgets.py:653 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:657 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:741 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1272 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1734 msgid "Pinned Items" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #: ../src/main.py:166 msgid "Loading Journal..." msgstr "" #: ../src/main.py:364 msgid "Erase Mode is active" msgstr "" #: ../src/main.py:369 msgid "Erase Mode deactivated" msgstr "" #: ../src/main.py:399 #, python-format msgid "%s to %s" msgstr "" #: ../src/external.py:51 msgid "Incomplete GNOME Activity Journal installation" msgstr "" #: ../src/external.py:53 msgid "" "GNOME Activity Journal comes together with a Zeitgeist extension which " "can't be found.\n" "\n" "If you've installed GNOME Activity Journal manually, please ensure that " "you've copied extension/gnome_activity_journal.py into ~/.local/" "share/zeitgeist/extensions/." msgstr "" #: ../src/external.py:69 #, python-format msgid "Could not find extension method \"%s\"" msgstr "" #: ../src/external.py:71 msgid "Aborting." msgstr "" #: ../src/external.py:75 msgid "Attempting to restart Zeitgeist..." msgstr "" #: ../src/external.py:84 msgid "ERROR" msgstr "" #: ../src/external.py:84 msgid "Unable to connect to Zeitgeist:" msgstr "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:157 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/common.py:150 msgid "Video" msgstr "" #: ../src/common.py:151 msgid "Music" msgstr "" #: ../src/common.py:152 msgid "Document" msgstr "" #: ../src/common.py:153 msgid "Image" msgstr "" #: ../src/common.py:154 msgid "Source Code" msgstr "" #: ../src/common.py:155 msgid "Unknown" msgstr "" #: ../src/common.py:156 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:1030 msgid "Morning" msgstr "" #: ../src/common.py:1030 msgid "Afternoon" msgstr "" #: ../src/common.py:1030 msgid "Evening" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/es.po0000644000175000017500000002553311610336456017052 0ustar rainctrainct# Spanish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-10-13 07:39+0000\n" "Last-Translator: Monkey \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "mostrar información adicional de depuración" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERROR" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "No se pudo conectar con Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Hoy" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Ayer" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Ir a hoy" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Escriba aquí para buscar..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferencias" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Desanclar" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Anclar" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Eliminar elemento del diario" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Eliminar todos los eventos con este URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Más Información" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Enviar a…" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Usado Con" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Lanzar este Asunto" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Eliminar Este Asunto" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Complementos activos:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Complementos" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s a %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Diario de actividad" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} con {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} con {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponible" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Sin conexión" #: ../src/content_objects.py:581 msgid "Away" msgstr "Ausente" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Ocupado" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "con" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Gestor de tiempo" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Adjuntos)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Nota\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "elemento" msgstr[1] "elementos" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Trabajó con un vídeo" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Trabajó con vídeos" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Trabajó con sonido" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Trabajó con una imagen" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Trabajó con imagenes" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Documento Editado o Leído" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Documentos Editados o Leídos" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Código Editado o Leído" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversación" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversaciones" #: ../src/config.py:244 msgid "Visited Website" msgstr "Visitó un sitio web" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Sitios Web Visitados" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Correo electrónico" #: ../src/config.py:245 msgid "Emails" msgstr "Correos electrónicos" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Otra Actividad" #: ../src/config.py:247 msgid "Other Activities" msgstr "Otras Actividades" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Editó o leyó una nota" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Notas Leída o Editada" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Música" #: ../src/common.py:146 msgid "Document" msgstr "Documento" #: ../src/common.py:147 msgid "Image" msgstr "Imágen" #: ../src/common.py:148 msgid "Source Code" msgstr "Código fuente" #: ../src/common.py:149 msgid "Unknown" msgstr "Desconocido" #: ../src/common.py:150 msgid "IM Message" msgstr "Mensaje instantáneo" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Mañana" #: ../src/common.py:936 msgid "Afternoon" msgstr "Tarde" #: ../src/common.py:936 msgid "Evening" msgstr "Noche" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Cambiar a vista múltiple" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Cambiar a vista de miniaturas" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Cambiar a vista de línea de tiempo" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Artículos Anclados" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Examine un registro cronológico de sus actividades y encuentre fácilmente " "archivos, contactos, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accesibilidad" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Permitir miniaturas como iconos" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Cantidad de días visibles" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Altura personalizada para la ventana principal, en píxeles (requiere " "reiniciar). No puede ser mayor que el tamaño del escritorio." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Anchura personalizado para la ventana principal, en píxeles (requiere " "reiniciar). No puede ser mayor que el tamaño del escritorio." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Cantidad de días para mostrar a la vez." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Indica si las opciones de accesibilidad especiales deben estar activadas " "(requiere reiniciar)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Indica si se permite mostrar pequeñas miniaturas junto a cada actividad " "(requiere reiniciar). Si es falso sólo se usarán iconos genéricos de tipos " "MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Altura de la ventana" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Anchura de la ventana" #~ msgid "Powered by Zeitgeist" #~ msgstr "Usando el motor de Zeitgeist" #~ msgid "Tags" #~ msgstr "Etiquetas" #~ msgid "Search" #~ msgstr "Buscar" gnome-activity-journal-0.8.0/po/hi.po0000644000175000017500000002116511610336456017040 0ustar rainctrainct# Hindi translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-01-29 17:43+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Hindi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/et.po0000644000175000017500000002215111610336456017044 0ustar rainctrainct# Estonian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-12-17 21:22+0000\n" "Last-Translator: olavi tohver \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "Kuva rohkem silumisteavet" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "TÕRGE" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Zeitgeist-iga ühendamine ebaõnnestus" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Täna" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Eile" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Mine tänasele päevale" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Otsimiseks trüki siia..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Eelistused" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Rohkem infot" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Saada..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Kasuta koos" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Käivita see objekt" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Kustuta see objekt" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Aktiivsed pluginad:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Pluginad" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s kuni %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "Saadaolevad" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Ühenduseta" #: ../src/content_objects.py:581 msgid "Away" msgstr "Eemal" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Hõivatud" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "järgnevaga" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Ajatelg" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Märge\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "kirje" msgstr[1] "kirjed" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "Vestlus" #: ../src/config.py:243 msgid "Conversations" msgstr "Vestlused" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-mailid" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Muusika" #: ../src/common.py:146 msgid "Document" msgstr "Dokumendid" #: ../src/common.py:147 msgid "Image" msgstr "Pildid" #: ../src/common.py:148 msgid "Source Code" msgstr "Lähtekood" #: ../src/common.py:149 msgid "Unknown" msgstr "Tundmatu" #: ../src/common.py:150 msgid "IM Message" msgstr "Välksõnumid" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Hommikul" #: ../src/common.py:936 msgid "Afternoon" msgstr "Pärastlõunal" #: ../src/common.py:936 msgid "Evening" msgstr "Õhtul" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" #~ msgid "Search" #~ msgstr "Otsi" gnome-activity-journal-0.8.0/po/POTFILES.in0000644000175000017500000000051111610336573017645 0ustar rainctrainctgnome-activity-journal src/content_objects.py src/supporting_widgets.py src/blacklist.py src/Indicator.py src/activity_widgets.py src/histogram.py src/quickconf.py src/__init__.py src/main.py src/external.py src/store.py src/config.py src/common.py extra/gnome-activity-journal.desktop.in extra/gnome-activity-journal.schemas.in gnome-activity-journal-0.8.0/po/pt.po0000644000175000017500000002117711610336456017066 0ustar rainctrainct# Portuguese translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-02-09 17:23+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/it.po0000644000175000017500000002651111610336571017052 0ustar rainctrainct# Italian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-26 18:18+0000\n" "Last-Translator: Stefano Candori \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "mostra informazioni di debug aggiuntive" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERRORE" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Impossibile connettersi a Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Oggi" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Ieri" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Vai a oggi" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Vai al giorno precedente " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Vai al giorno successivo" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Digita qui per cercare..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "In riproduzione..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Impostazioni" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Informazioni" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Rimuovi appunto" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Appunta questo elemento" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Elimina elemento dalla lista" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Elimina tutti gli elementi con questo URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Ulteriori Informazioni" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Invia a..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Usato con" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Avvia questo elemento" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Cancella questo elemento" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Plugin attivi:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Plugins" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Mostra icona nella barra di sistema" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Configurazione" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Caricando il Giornale delle attività..." #: ../src/main.py:314 #, python-format msgid "%s to %s" msgstr "da %s a %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Giornale delle attività" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} con {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} con {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponibile" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Fuori rete" #: ../src/content_objects.py:581 msgid "Away" msgstr "Assente" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Non disponibile" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "con" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Time Tracker" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} da {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} da {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " %s Allegati" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Nota\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "elemento" msgstr[1] "elementi" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Lavorato con un video" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Lavorato con dei video" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Lavorato con file Audio" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Lavorato con un'immagine" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Lavorato con immagini" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Documento Modificato o Letto" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Documenti Modificati o Letti" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Codice Modificato o Letto" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversazione" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversazioni" #: ../src/config.py:244 msgid "Visited Website" msgstr "Sito web visitato" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Siti web visitati" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "Emails" #: ../src/config.py:246 msgid "Todo" msgstr "Da Fare" #: ../src/config.py:246 msgid "Todos" msgstr "Cose da fare" #: ../src/config.py:247 msgid "Other Activity" msgstr "Altra Attività" #: ../src/config.py:247 msgid "Other Activities" msgstr "Altre Attività" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Nota modificata o letta" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Note modificate o lette" #: ../src/config.py:249 msgid "Software Development" msgstr "Sviluppo Software" #: ../src/config.py:249 msgid "Software Developments" msgstr "Sviluppo Software" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Nascondi/Mostra GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Brani musicali" #: ../src/common.py:146 msgid "Document" msgstr "Documento" #: ../src/common.py:147 msgid "Image" msgstr "Immagine" #: ../src/common.py:148 msgid "Source Code" msgstr "Codice Sorgente" #: ../src/common.py:149 msgid "Unknown" msgstr "Sconosciuto" #: ../src/common.py:150 msgid "IM Message" msgstr "Messaggio IM" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Mattino" #: ../src/common.py:936 msgid "Afternoon" msgstr "Pomeriggio" #: ../src/common.py:936 msgid "Evening" msgstr "Sera" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Passa alla visualizzazione multipla" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Nome: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Tipo MIME: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Passa alla visualizzazione con anteprime" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Passa a visualizzazione temporale" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Elementi appuntati" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Consente di visualizzare un registro cronologico delle proprie attività e " "trovare con facilità file, contatti, ecc..." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accessibilità" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Consenti di utilizzare miniature come icone" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Totale dei giorni visibili" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Altezza personalizzata della finestra principale, in pixel (richiede il " "riavvio). Non può essere maggiore della dimensione del Desktop." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Larghezza personalizzata della finestra principale, in pixel (richiede il " "riavvio). Non può essere maggiore della dimensione del Desktop." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Il totale dei giorni da mostrare contemporaneamente." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Abilitare le opzioni speciali di accessibilità (richiede il riavvio)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Permettere la visualizzazione di piccole miniature al fianco di ogni " "attività (richiede il riavvio). Se falso, verranno usate solo le icone " "generiche dei rispettivi mimetypes." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Altezza finestra" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Larghezza finestra" #~ msgid "Powered by Zeitgeist" #~ msgstr "Powered by Zeitgeist" #~ msgid "Tags" #~ msgstr "Etichette" #~ msgid "Search" #~ msgstr "Cerca" gnome-activity-journal-0.8.0/po/da.po0000644000175000017500000002116711610336456017026 0ustar rainctrainct# Danish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-01-09 13:47+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/zh_CN.po0000644000175000017500000002513311610336456017440 0ustar rainctrainct# Chinese (Simplified) translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-04-24 10:03+0000\n" "Last-Translator: Lele Long \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-04-25 05:02+0000\n" "X-Generator: Launchpad (build 12758)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "输出附加调试信息" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "错误" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "无法连接到 Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "今天" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "昨天" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "转到今天" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "转到上一天 " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "转到下一天" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "输入以搜索..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "首选项" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "关于" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "取消固定" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "添加到锁定定" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "从活动志中删除" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "删除所有包含这个 URI 的事件" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "更多信息" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "发送到..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "打开这个主题" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "删除该主题" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "已启用的插件" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "插件" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "在系统托盘显示图标" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "配置" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "加载日志中..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s 到 %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "活动志" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "可用" #: ../src/content_objects.py:580 msgid "Offline" msgstr "离线" #: ../src/content_objects.py:581 msgid "Away" msgstr "离开" #: ../src/content_objects.py:582 msgid "Busy" msgstr "忙碌" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "用" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "项" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "编辑或阅读文档" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "编辑或阅读文档" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "编辑或阅读代码" #: ../src/config.py:243 msgid "Conversation" msgstr "对话" #: ../src/config.py:243 msgid "Conversations" msgstr "对话" #: ../src/config.py:244 msgid "Visited Website" msgstr "访问过的网站" #: ../src/config.py:244 msgid "Visited Websites" msgstr "访问过的网站" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "电子邮件" #: ../src/config.py:245 msgid "Emails" msgstr "电子邮件" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "其他活动" #: ../src/config.py:247 msgid "Other Activities" msgstr "其他活动" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "编辑或阅读笔记" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "已编辑或阅读的笔记" #: ../src/config.py:249 msgid "Software Development" msgstr "软件开发" #: ../src/config.py:249 msgid "Software Developments" msgstr "软件开发" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "隐藏/显示 GAJ" #: ../src/common.py:144 msgid "Video" msgstr "视频" #: ../src/common.py:145 msgid "Music" msgstr "音乐" #: ../src/common.py:146 msgid "Document" msgstr "文档" #: ../src/common.py:147 msgid "Image" msgstr "图片" #: ../src/common.py:148 msgid "Source Code" msgstr "源码" #: ../src/common.py:149 msgid "Unknown" msgstr "未知" #: ../src/common.py:150 msgid "IM Message" msgstr "即时消息" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "上午" #: ../src/common.py:936 msgid "Afternoon" msgstr "下午" #: ../src/common.py:936 msgid "Evening" msgstr "晚上" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "名称: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "切换到缩略图视图" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "切换到时间轴视图" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "锁定项目" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "浏览按时间顺序排列的活动志,轻松找到文件。" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "辅助功能" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "允许缩略图作为图标" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "可见的天数" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "自定义主窗口的高度,以像素计(需要重起程序)。不能大于桌面的尺寸。" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "自定义主窗口的宽度,以像素计(需要重起程序)。不能大于桌面的尺寸。" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "一次显示的天数" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "是否启用特殊的无障碍设置(需要重起程序)。" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "是否在每个活动后面显示小缩略图。如果不,只会使用基本的类型图标。" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "窗口高度" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "窗口宽度" #~ msgid "Powered by Zeitgeist" #~ msgstr "Zeitgeist 强力驱动" #~ msgid "Click today to return to today" #~ msgstr "点击今天回到今天" #~ msgid "Right click for a thumbnail view" #~ msgstr "右击转到缩略图视图" #~ msgid "Left click for a detailed timeline view" #~ msgstr "单击转到详细时间线视图" #~ msgid "Click to return multiday view" #~ msgstr "点击回到多日视图" #~ msgid "Pinned items" #~ msgstr "固定的项目" #~ msgid "Pin to Today" #~ msgstr "固定到今天" #, python-format #~ msgid "%s to today" #~ msgstr "%s 到 今天" #~ msgid "Most used with..." #~ msgstr "最常用的..." gnome-activity-journal-0.8.0/po/en_AU.po0000644000175000017500000002122411610336456017423 0ustar rainctrainct# English (Australia) translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-06-14 08:26+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (Australia) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:53+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/ro.po0000644000175000017500000002674011610336456017064 0ustar rainctrainct# Romanian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-05 21:37+0000\n" "Last-Translator: Daniel Șerbănescu \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "afișează informații adiționale pentru depanare" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "EROARE" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nu s-a putut conecta la Zeigeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Astăzi" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Ieri" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Salt la astăzi" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Scrie aici pentru a căuta..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferințe" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Elimină fixarea" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Șterge elementul din jurnal" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Șterge toate evenimentele cu acest URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Mai multe informații" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Trimite la..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Folosit cu" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Lansează acest subiect" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Șterge acest subiect" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Module active:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Module" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "De la %s până %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Jurnal de activitate" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} cu {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} cu {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponibil" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Deconectat" #: ../src/content_objects.py:581 msgid "Away" msgstr "Absent" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Ocupat" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "cu" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Evidența timpului" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de la {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de la {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s atașamente)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Notă\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "element" msgstr[1] "elemente" msgstr[2] "de elemente" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Lucrat cu un clip video" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Lucrat cu clipuri video" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Lucrat cu un fișier de sunet" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Lucrat cu o imagine" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Lucrat cu imagini" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Citit sau modificat document" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Citit sau modificat documente" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Citit sau modificat cod sursă" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversație" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversații" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "Email-uri" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Altă activitate" #: ../src/config.py:247 msgid "Other Activities" msgstr "Alte activităţi" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Filme" #: ../src/common.py:145 msgid "Music" msgstr "Muzică" #: ../src/common.py:146 msgid "Document" msgstr "Document" #: ../src/common.py:147 msgid "Image" msgstr "Imagine" #: ../src/common.py:148 msgid "Source Code" msgstr "Cod sursă" #: ../src/common.py:149 msgid "Unknown" msgstr "Necunoscut" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Dimineață" #: ../src/common.py:936 msgid "Afternoon" msgstr "După-amiază" #: ../src/common.py:936 msgid "Evening" msgstr "Seară" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Elemente fixate" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Navighează jurnalul cronologic al activităților tale și găsește ușor " "fișierele, contactele, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accesibilitate" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Folosește miniaturile pe post de iconuri" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Numărul de zile vizibile" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Înălțimea personalizată pentru fereastra principală, în pixeli (necesită " "repornire). Nu poate fi mai mare de mărimea spațiului de lucru." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Lățimea personalizată pentru fereastra principală, în pixeli (necesită " "repornire). Nu poate fi mai mare de mărimea spațiului de lucru." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Numărul de zile vizibile în acelaşi timp." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Dacă opțiunile de accesibilitate speciale ar trebui să fie activate " "(necesită repornire)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Dacă permite afișarea miniaturilor lângă fiecare activitate (necesită " "repornire). Dacă este setat pe valoarea „False”, doar iconițele generice " "mime-type vor fi folosite." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Înălțimea ferestrei" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Lățimea ferestrei" #, python-format #~ msgid "%s to today" #~ msgstr "%s până astăzi" #~ msgid "Pinned items" #~ msgstr "Elemente fixate" #~ msgid "Most used with..." #~ msgstr "Cel mai utilizat cu..." #~ msgid "Powered by Zeitgeist" #~ msgstr "Folosind Zeitgeist" #~ msgid "Click today to return to today" #~ msgstr "Clic pe astăzi pentru a te întoarce la astăzi" #~ msgid "Right click for a thumbnail view" #~ msgstr "Clic dreapta pentru afișarea cu miniaturi" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Clic stânga pentru afișare detaliată pe timp" #~ msgid "Click to return multiday view" #~ msgstr "Clic pentru a reveni la vizualizarea pe zile" #~ msgid "Pin to Today" #~ msgstr "Fixează astăzi" #~ msgid "Search" #~ msgstr "Caută" #~ msgid "Tags" #~ msgstr "Etichete" gnome-activity-journal-0.8.0/po/eo.po0000644000175000017500000002257111610336456017045 0ustar rainctrainct# Esperanto translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-04-05 08:01+0000\n" "Last-Translator: Michael Moroni \n" "Language-Team: Esperanto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-04-06 04:52+0000\n" "X-Generator: Launchpad (build 12559)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "presi aldonan sencimigan informon" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERARO" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Ne eblas konekti al Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Iri hodiaŭen" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Tajpu ĉi tie por traserĉi..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Agordoj" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Forigi pinglon" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Aldoni pinglon" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Forigi eron el ĵurnalo" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Forigi ĉiujn okazintaĵojn per ĉi tiu URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Pliaj informoj" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Sendi al..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} kun {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} kun {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponebla" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Malkonektita" #: ../src/content_objects.py:581 msgid "Away" msgstr "Fora" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Okupata" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "kun" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s aldonaĵoj)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Notaro\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "ero" msgstr[1] "eroj" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" #~ msgid "Search" #~ msgstr "Serĉi" gnome-activity-journal-0.8.0/po/tr.po0000644000175000017500000002471611610336456017072 0ustar rainctrainct# Turkish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-07-04 09:56+0000\n" "Last-Translator: Irmak Bıçakçıgil \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-07-05 04:38+0000\n" "X-Generator: Launchpad (build 13168)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "ilave hata ayıklama bilgilerini yardır" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "HATA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Zeitgeist'e bağlanılamaz:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Bugün" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Dün" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Bugüne Git" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Önceki güne git " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Sonraki güne git" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Aramak için buraya yazın..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Tercihler" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Hakkında" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "İğneleri" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "İğne Ekle" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Ögeyi Journal'dan Sil" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Bu URI ile tüm olayları sil" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Daha Fazla Bilgi" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Gönder..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "İle Kullanıldı" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Bu ögeyi çalıştır" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Bu ögeyi sil" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Aktif olan Eklentiler" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Eklentiler" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Simgeyi sistem tepsisinde göster" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Yapılandırma" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s'den %s'e" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Etkinlik Günlüğü" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} ile {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} ile {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Uygun" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Çevrimdışı" #: ../src/content_objects.py:581 msgid "Away" msgstr "Uzakta" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Meşgul" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "ile" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Zaman İzleyici" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} dan {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} dan {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Ekler)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Not\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "öğe" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Bir video ile çalıştı" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Videolarla çalıştı" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Seslerle çalıştı" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Bir resim ile çalıştı" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Resimlerle çalıştı" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Döküman Düzenlendi yada Okundu" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Dökümanlar Düzenlendi yada Okundu" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Kod Düzenlendi yada Okundu" #: ../src/config.py:243 msgid "Conversation" msgstr "Konuşma" #: ../src/config.py:243 msgid "Conversations" msgstr "Konuşmalar" #: ../src/config.py:244 msgid "Visited Website" msgstr "Ziyaret edilmiş Web-Sayfası" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Ziyaret edilmiş Web-Sayfaları" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-Posta" #: ../src/config.py:245 msgid "Emails" msgstr "E-postalar" #: ../src/config.py:246 msgid "Todo" msgstr "Yapılacaklar" #: ../src/config.py:246 msgid "Todos" msgstr "Yapılacaklar" #: ../src/config.py:247 msgid "Other Activity" msgstr "Diğer Etkinlik" #: ../src/config.py:247 msgid "Other Activities" msgstr "Diğer Etkinlikler" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Düzenlenmiş yada Okunmuş Not" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Düzenlenmiş yada Okunmuş Notlar" #: ../src/config.py:249 msgid "Software Development" msgstr "Yazılım Geliştirme" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Müzik" #: ../src/common.py:146 msgid "Document" msgstr "Döküman" #: ../src/common.py:147 msgid "Image" msgstr "Resim" #: ../src/common.py:148 msgid "Source Code" msgstr "Kaynak Kodu" #: ../src/common.py:149 msgid "Unknown" msgstr "Bilinmeyen" #: ../src/common.py:150 msgid "IM Message" msgstr "IM Mesajı" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Sabah" #: ../src/common.py:936 msgid "Afternoon" msgstr "Öğleden sonra" #: ../src/common.py:936 msgid "Evening" msgstr "Akşam" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Çoklu Görünümü Değiştir" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "İsim: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Zamançizelgesi-Görünümünü Değiştir" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "İğnelenmiş ögeler" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Etkinliklerinizin sürebilimsel kütüklerine göz atın ve dosyaları, kişileri " "vb. kolayca bulun." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Erişebilirlik" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Görülebilir günlerin miktarı" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Tek seferde gösterilecek gün sayısı." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Pencere yüksekliği" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Pencere genişliği" #~ msgid "Powered by Zeitgeist" #~ msgstr "Zeitgeist tarafından Geliştirilmiştir" #~ msgid "Tags" #~ msgstr "Etiketler" #~ msgid "Goto Today" #~ msgstr "Bugüne Git" #~ msgid "Search" #~ msgstr "Ara" gnome-activity-journal-0.8.0/po/hu.po0000644000175000017500000002564011610336456017056 0ustar rainctrainct# Hungarian translation for gnome-activity-journal # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-05-29 16:55+0000\n" "Last-Translator: Kántor Dániel \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-05-30 05:08+0000\n" "X-Generator: Launchpad (build 12959)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "további hibaelhárítási információ kiírása" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "HIBA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nem sikerült csatlakozni a Zeitgeisthoz:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Ma" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Tegnap" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Ugrás a mai naphoz" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Ugrás az előző naphoz " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Ugrás a következő naphoz" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Gépeljen ide a kereséshez..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Lejátszás..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Beállítások" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Névjegy" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Kitűzés megszüntetése" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Kitűzés" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Bejegyzés eltávolítása a Naplóból" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Távolítson el minden bejegyzést erről a címről" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "További információ" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Küldés ide…" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Használta ezzel" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Bejegyzés elindítása" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Bejegyzés eltávolítása" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Bekapcsolt bővítőmodulok:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Bővítőmodulok" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Jelenjen meg ikon az óra mellet" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Konfiguráció" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Napló betöltése..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s és %s között" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Aktivitásfigyelő" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} ezzel: {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} ezzel: {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Elérhető" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Kijelentkezett" #: ../src/content_objects.py:581 msgid "Away" msgstr "Távol" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Elfoglalt" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "ezzel" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Időnyilvántartó" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} ebből: {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} ebből: {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Mellékletek)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Jegyzet\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "bejegyzés" msgstr[1] "bejegyzések" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Egy videóval foglalkozott" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Videókkal foglalkozott" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Hangfájlokkal foglalkozott" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Egy képfájllal foglalkozott" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Képfájlokkal foglalkozott" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Egy dokumentummal foglalkozott" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Dokumentumokkal foglalkozott" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Forráskóddal fogalkozott" #: ../src/config.py:243 msgid "Conversation" msgstr "Beszélgetés" #: ../src/config.py:243 msgid "Conversations" msgstr "Beszélgetések" #: ../src/config.py:244 msgid "Visited Website" msgstr "Meglátogatott egy weboldalt" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Weboldalakat látogatott" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-mailek" #: ../src/config.py:246 msgid "Todo" msgstr "Tennivalók" #: ../src/config.py:246 msgid "Todos" msgstr "Tennivalók" #: ../src/config.py:247 msgid "Other Activity" msgstr "Egyéb tevékenység" #: ../src/config.py:247 msgid "Other Activities" msgstr "Egyéb tevékenység" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Egy jegyzettel foglalkozott" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Jegyzetekkel foglalkozott" #: ../src/config.py:249 msgid "Software Development" msgstr "Szoftverfejlesztés" #: ../src/config.py:249 msgid "Software Developments" msgstr "Szoftverfejlesztés" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Videó" #: ../src/common.py:145 msgid "Music" msgstr "Zene" #: ../src/common.py:146 msgid "Document" msgstr "Dokumentum" #: ../src/common.py:147 msgid "Image" msgstr "Kép" #: ../src/common.py:148 msgid "Source Code" msgstr "Forráskód" #: ../src/common.py:149 msgid "Unknown" msgstr "Ismeretlen" #: ../src/common.py:150 msgid "IM Message" msgstr "Azonnali üzenet" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Reggel" #: ../src/common.py:936 msgid "Afternoon" msgstr "Délután" #: ../src/common.py:936 msgid "Evening" msgstr "Este" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Összetett nézetre váltás" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Név: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME Típus: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Ikonnézetre váltás" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Idősávnézetre váltás" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Kitűzött elemek" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Időrendbe szedett napló a tevékenységeiről. Segítségével egyszerűen " "megtalálhatja a fájljait, kapcsolatait stb." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Akadálymentesítés" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Miniatűrök megjelenítése" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Látható napok száma" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Egyedi magasság a főablaknak, pixelekben (újraindítás szükséges). Nem lehet " "nagyobb mint az asztal mérete." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Egyedi szélesség a főablaknak, pixelekben (újraindítás szükséges). Nem lehet " "nagyobb mint az asztal mérete." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Az egyszerre megjelenítendő napok száma." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Ablak magassága" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Ablak szélessége" gnome-activity-journal-0.8.0/po/uk.po0000644000175000017500000002742611610336456017065 0ustar rainctrainct# Ukrainian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-12-18 19:47+0000\n" "Last-Translator: brabadu \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-01-27 04:53+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "Вивести додаткову інформацію вдлагодження" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ПОМИЛКА" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Не вдалось підключитись до Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Сьогодні" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Вчора" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Перейти до сьогоднішнього дня" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Для пошуку друкуйте тут..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Налаштування" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Видалити позначку" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Додати позначку" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Видалити елемент з журналу" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Видалити всі пов’язані події" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Більше інформації" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Надіслати до..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Відкрити цей об’єкт" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Видалити цей об’єкт" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Активні розширення:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Розширення:" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s до %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Журнал активності" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} з {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} з {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Наявне" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Не в мережі" #: ../src/content_objects.py:581 msgid "Away" msgstr "Відсутній" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Зайнятий" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "з" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Слідкування за часом" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} від {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} від {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Додатків)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Замітка\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "елемент" msgstr[1] "елемента" msgstr[2] "елементів" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Працював(ла) з відео" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Робота з відео" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Робота з аудіо" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Робота з зображенням" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Робота з зображеннями" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Редаговані чи прочитані документи" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Редаговані чи прочитані документи" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Робота з кодом" #: ../src/config.py:243 msgid "Conversation" msgstr "Розмова" #: ../src/config.py:243 msgid "Conversations" msgstr "Розмови" #: ../src/config.py:244 msgid "Visited Website" msgstr "Переглядали сайт" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Переглянуті сайти" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "Електронна пошта" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Інша активінсть" #: ../src/config.py:247 msgid "Other Activities" msgstr "Інша активність" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Редагування чи читання замітки" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Редагування чи читання заміток" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Відео" #: ../src/common.py:145 msgid "Music" msgstr "Музика" #: ../src/common.py:146 msgid "Document" msgstr "Документ" #: ../src/common.py:147 msgid "Image" msgstr "Зображення" #: ../src/common.py:148 msgid "Source Code" msgstr "Програмний код" #: ../src/common.py:149 msgid "Unknown" msgstr "Невідомо" #: ../src/common.py:150 msgid "IM Message" msgstr "Повідомлення чату" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Ранок" #: ../src/common.py:936 msgid "Afternoon" msgstr "Після обіду" #: ../src/common.py:936 msgid "Evening" msgstr "Вечір" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Розширений перегляд" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Перегляд мініатюр" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Перегляд на шкалі часу" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Позначені елементи" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Перегляд хронології Ваших дій та легкий пошук файлів, контактів та ін." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Доступність" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "дозволити мініатюри у вигляді іконок" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Кількість днів перегляду" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Власна висота головного вікна в пікселях (потрібен перезапуск). Значення не " "може бути більшим, ніж розмір робочого столу." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Власна висота головного вікна в пікселях (потрібен перезапуск). Значення не " "може бути більшим, ніж розмір робочого столу." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Кількість днів, показаних одночасно" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Висота вікна" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Ширина вікна" #~ msgid "Powered by Zeitgeist" #~ msgstr "Працює на Zeitgeist" #~ msgid "Search" #~ msgstr "Пошук" #~ msgid "Tags" #~ msgstr "Мітки" gnome-activity-journal-0.8.0/po/ca.po0000644000175000017500000003651011610337450017016 0ustar rainctrainctmsgid "" msgstr "" "Project-Id-Version: GNOME Activity Journal\n" "Report-Msgid-Bugs-To: zeitgeist@lists.launchpad.net\n" "POT-Creation-Date: 2011-07-16 18:34+0200\n" "PO-Revision-Date: 2011-07-16 18:41+0100\n" "Last-Translator: Siegfried-Angel Gevatter Pujals \n" "Language-Team: Siegfried Gevatter \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" "X-Poedit-Language: Catalan\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "mostra informació extra de depuració" #: ../src/content_objects.py:595 #: ../src/content_objects.py:597 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} amb {event.subjects[0].text}" #: ../src/content_objects.py:596 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} amb {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:607 msgid "Available" msgstr "Disponible" #: ../src/content_objects.py:608 msgid "Offline" msgstr "Fora de línia" #: ../src/content_objects.py:609 msgid "Away" msgstr "Absent" #: ../src/content_objects.py:610 msgid "Busy" msgstr "Ocupat" #: ../src/content_objects.py:643 #: ../src/content_objects.py:648 #: ../src/content_objects.py:653 msgid "with" msgstr "amb" #: ../src/content_objects.py:678 msgid "Surfed in " msgstr "S'ha navegat a " #: ../src/content_objects.py:698 msgid "Time Tracker" msgstr "Comptador de temps" #: ../src/content_objects.py:719 msgid "Chatted in " msgstr "S'ha xatejat a " #: ../src/content_objects.py:778 #: ../src/content_objects.py:780 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de {event.subjects[0].text}" #: ../src/content_objects.py:779 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:783 #, python-format msgid " (%s Attachments)" msgstr " (%s adjuncions)" #: ../src/content_objects.py:807 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:808 #: ../src/content_objects.py:809 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Nota\n" "{event.subjects[0].text}" #: ../src/content_objects.py:827 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:828 #: ../src/content_objects.py:829 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/supporting_widgets.py:77 #: ../src/main.py:385 msgid "Today" msgstr "Avui" #: ../src/supporting_widgets.py:80 #: ../src/main.py:388 msgid "Yesterday" msgstr "Ahir" #: ../src/supporting_widgets.py:179 msgid "Go to Today" msgstr "Torna a avui" #: ../src/supporting_widgets.py:181 msgid "Go to the previous day " msgstr "Vés al dia anterior " #: ../src/supporting_widgets.py:181 msgid "Go to the next day" msgstr "Vés al dia següent" #: ../src/supporting_widgets.py:527 msgid "Type here to search..." msgstr "Escriviu aquí per a cercar..." #: ../src/supporting_widgets.py:715 msgid "Playing..." msgstr "S'està reproduïnt..." #: ../src/supporting_widgets.py:835 #: ../src/supporting_widgets.py:845 #: ../src/supporting_widgets.py:1624 msgid "Preferences" msgstr "Preferències" #: ../src/supporting_widgets.py:844 msgid "About" msgstr "Quant a" #: ../src/supporting_widgets.py:846 msgid "Toggle Erase Mode" msgstr "Commuta el mode d'esborrat" #: ../src/supporting_widgets.py:930 #: ../src/activity_widgets.py:570 msgid "Remove Pin" msgstr "Treu l'estat d'enganxós" #: ../src/supporting_widgets.py:931 #: ../src/supporting_widgets.py:1404 msgid "Add Pin" msgstr "Fes enganxós" #: ../src/supporting_widgets.py:932 msgid "Delete item from Journal" msgstr "Suprimeix aquest element del diari" #: ../src/supporting_widgets.py:933 msgid "Delete all events with this URI" msgstr "Eŀlimina tots els esdeveniments amb aquesta URI" #: ../src/supporting_widgets.py:934 #: ../src/supporting_widgets.py:1504 #: ../src/supporting_widgets.py:1559 msgid "More Information" msgstr "Més informació" #: ../src/supporting_widgets.py:946 msgid "Send To..." msgstr "Envia a..." #: ../src/supporting_widgets.py:1036 msgid "Delete items from Journal" msgstr "Elimina elements del diari" #: ../src/supporting_widgets.py:1037 msgid "Show all grouped items" msgstr "Mostra tots els elements agrupats" #: ../src/supporting_widgets.py:1399 msgid "Launch this subject" msgstr "Obre aquest element" #: ../src/supporting_widgets.py:1401 msgid "Delete this subject" msgstr "Esborra aquest element" #: ../src/supporting_widgets.py:1407 #: ../src/supporting_widgets.py:1418 msgid "Edit Note" msgstr "Edita l'anotació" #: ../src/supporting_widgets.py:1634 msgid "Active Plugins:" msgstr "Extensions actives:" #: ../src/supporting_widgets.py:1642 msgid "Plugins" msgstr "Extensions" #: ../src/supporting_widgets.py:1647 msgid "Show icon in system tray" msgstr "Mostra una icona a l'àrea de notificació" #: ../src/supporting_widgets.py:1654 msgid "Configuration" msgstr "Configuració" #: ../src/Indicator.py:41 #: ../src/Indicator.py:63 #: ../src/main.py:399 #: ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Diari d'activitats" #: ../src/Indicator.py:99 msgid "Hide/Show GAJ" msgstr "Mostra/oculta el diari d'activitats" #: ../src/Indicator.py:101 msgid "Start incognito mode (pause event logging)" msgstr "Atura l'enregistrament d'esdeveniments (mode d'incògnit)" #: ../src/Indicator.py:103 msgid "Resume event logging (exit incognito)" msgstr "Reprèn l'enregistrament d'esdeveniments" #: ../src/activity_widgets.py:118 msgid "Switch to MultiView" msgstr "Canvia a la vista estàndard" #: ../src/activity_widgets.py:630 #: ../src/activity_widgets.py:661 msgid "Notes" msgstr "Anotacions" #: ../src/activity_widgets.py:653 msgid "Name: " msgstr "Nom:" #: ../src/activity_widgets.py:657 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Tipus de fitxer: %s (%s)" #: ../src/activity_widgets.py:741 msgid "Switch to ThumbView" msgstr "Canvia a la vista d'icones" #: ../src/activity_widgets.py:1272 msgid "Switch to TimelineView" msgstr "Canvia a la línia del temps" #: ../src/activity_widgets.py:1734 msgid "Pinned Items" msgstr "Elements enganxosos" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "element" msgstr[1] "elements" #: ../src/main.py:166 msgid "Loading Journal..." msgstr "S'està carregant el diari d'activitats..." #: ../src/main.py:364 msgid "Erase Mode is active" msgstr "El mode d'esborrat és actiu" #: ../src/main.py:369 msgid "Erase Mode deactivated" msgstr "El mode d'esborrat és inactiu" #: ../src/main.py:399 #, python-format msgid "%s to %s" msgstr "%s a %s" #: ../src/external.py:51 msgid "Incomplete GNOME Activity Journal installation" msgstr "Instaŀlació incompleta del diari d'activitats" #: ../src/external.py:53 msgid "" "GNOME Activity Journal comes together with a Zeitgeist extension which can't be found.\n" "\n" "If you've installed GNOME Activity Journal manually, please ensure that you've copied extension/gnome_activity_journal.py into ~/.local/share/zeitgeist/extensions/." msgstr "" "El diari d'activitats de GNOME requereix una extensió per al Zeitgeist que no es pot trobar.\n" "\n" "Si heu instaŀlat el diari d'activitats manualment, assegureu-vos que heu copiat el fitxer extension/gnome_activity_journal.py a ~/.local/share/zeitgeist/extensions/." #: ../src/external.py:69 #, python-format msgid "Could not find extension method \"%s\"" msgstr "No s'ha pogut trobar la funció «%s» que hauria de ser proporcionada per una extensió." #: ../src/external.py:71 msgid "Aborting." msgstr "Avortant." #: ../src/external.py:75 msgid "Attempting to restart Zeitgeist..." msgstr "S'està intentant tornar a iniciar el Zeitgeist..." #: ../src/external.py:84 msgid "ERROR" msgstr "Error" #: ../src/external.py:84 msgid "Unable to connect to Zeitgeist:" msgstr "No s'ha pogut establir connexió amb el Zeitgeist:" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Vídeo" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Vídeos amb que s'ha treballat" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Audio" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Imatges" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Imatges amb que s'ha treballat" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Documents llegits o modificats" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Documents llegits o modificats" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Codi llegit o modificat" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversa" #: ../src/config.py:243 msgid "Conversations" msgstr "Converses" #: ../src/config.py:244 msgid "Visited Website" msgstr "Pàgina web visitada" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Pàgines web visitades" #: ../src/config.py:245 #: ../src/common.py:157 msgid "Email" msgstr "Correu electrònic" #: ../src/config.py:245 msgid "Emails" msgstr "Correus electrònics" #: ../src/config.py:246 msgid "Todo" msgstr "Pendent" #: ../src/config.py:246 msgid "Todos" msgstr "Pendents" #: ../src/config.py:247 msgid "Other Activity" msgstr "Una altre activitat" #: ../src/config.py:247 msgid "Other Activities" msgstr "Altres actiivtats" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Nota" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Notes" #: ../src/config.py:249 msgid "Software Development" msgstr "Desenvolupament" #: ../src/config.py:249 msgid "Software Developments" msgstr "Desenvolupament" #: ../src/common.py:150 msgid "Video" msgstr "Vídeo" #: ../src/common.py:151 msgid "Music" msgstr "Música" #: ../src/common.py:152 msgid "Document" msgstr "Document" #: ../src/common.py:153 msgid "Image" msgstr "Imatge" #: ../src/common.py:154 msgid "Source Code" msgstr "Codi font" #: ../src/common.py:155 msgid "Unknown" msgstr "Desconegut" #: ../src/common.py:156 msgid "IM Message" msgstr "Missatge de missatgeria instantània" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:1030 msgid "Morning" msgstr "Matí" #: ../src/common.py:1030 msgid "Afternoon" msgstr "Tarda" #: ../src/common.py:1030 msgid "Evening" msgstr "Vespre" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "Browse a chronological log of your activities and easily find files, contacts, etc." msgstr "Vegeu un registre cronològic de les vostres activitats i trobeu fàcilment fitxers, contactes, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accessibilitat" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Permet miniaturitzacions com a icones" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Nombre de dies visibles" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "Customized height for the main window, in pixels (requires restart). Can't be bigger than the desktop's size." msgstr "Alçada de la finestra personalitzada, en píxels (necessita reiniciar). No pot ser superior a la mida de l'escriptori." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "Customized width for the main window, in pixels (requires restart). Can't be bigger than the desktop's size." msgstr "Amplada de la finestra personalitzada, en píxels (necessita reiniciar). No pot ser superior a la mida de l'escriptori." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "El nombre de dies a mostrar alhora." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "Whether special accessibility options should be enabled (requires restart)." msgstr "Si les opcions especials d'accessibilitat s'han d'habilitar (necessita reiniciar)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "Whether to allow showing little thumbnails next to each activity (requires restart). If False, only generic mime-type icons will be used." msgstr "Si és permès mostrar petites miniaturitzacions al costat de cada activitat (necessita reiniciar). Si és Fals, només s'utilitzaran icones genèriques segons el tipus MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Alçada de la finestra" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Amplada de la finestra" #~ msgid "Used With" #~ msgstr "Utilitzat amb" #~ msgid "Go back in time" #~ msgstr "Retrocedeix en el temps" #~ msgid "Look into the future" #~ msgstr "Avança en el temps" #~ msgid "Recent Events" #~ msgstr "Esdeveniments recents" #~ msgid "Show Options" #~ msgstr "Mostra les opcions" #~ msgid "Personal Timeline" #~ msgstr "Línia cronològica personal" #~ msgid "Related files..." #~ msgstr "Fitxers relacionats..." #~ msgid "Properties..." #~ msgstr "Propietats..." #~ msgid "Search..." #~ msgstr "Cerca..." #~ msgid "Days to display:" #~ msgstr "Dies a mostrar:" #~ msgid "1 day" #~ msgstr "1 dia" #~ msgid "3 days" #~ msgstr "3 dies" #~ msgid "1 week" #~ msgstr "1 setmana" #~ msgid "1 month" #~ msgstr "1 mes" #~ msgid "Go Back in Time" #~ msgstr "Torna endarrere en el temps" #~ msgid "Look into the Future" #~ msgstr "Mira al futur" #~ msgid "Jump to Today" #~ msgstr "Vés a avui" #~ msgid "Journal" #~ msgstr "Diari" #~ msgid "items" #~ msgstr "elements" #~ msgid "Click today to return to today" #~ msgstr "Feu clic sobre «Avui» per a tornar a avui" #~ msgid "Powered by Zeitgeist" #~ msgstr "Funciona amb Zeitgeist" #~ msgid "%s to today" #~ msgstr "%s a avui" #~ msgid "Most used with..." #~ msgstr "Més utilitzat amb..." #~ msgid "Actor" #~ msgstr "Actor" #~ msgid "Time" #~ msgstr "Hora" #~ msgid "Interpretation" #~ msgstr "Interpretació" #~ msgid "Manifestation" #~ msgstr "Manifestació" #~ msgid "Related Items" #~ msgstr "Elements relacionats" #~ msgid "Click to return to multiday view" #~ msgstr "Feu clic al botó per a veure una vista de múltiples dies" #~ msgid "Left click for a detailed timeline view" #~ msgstr "" #~ "Feu clic al botó esquerra del ratolí per a veure una línia de temps " #~ "detallada" #~ msgid "Right click for a thumbnail view" #~ msgstr "" #~ "Feu clic al botó dret del ratolí per a veure una vista de miniatures" #~ msgid "Pinned items" #~ msgstr "Elements enganxosos" #~ msgid "Pin to Today" #~ msgstr "Enganxós" #~ msgid "Click to return multiday view" #~ msgstr "Feu clic al botó per a veure una vista de múltiples dies" #~ msgid "Search" #~ msgstr "Cerca" #~ msgid "Tags" #~ msgstr "Etiquetes" gnome-activity-journal-0.8.0/po/lt.po0000644000175000017500000002602511610336456017057 0ustar rainctrainct# Lithuanian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-10-17 07:48+0000\n" "Last-Translator: GNOME Zeitgeist Team \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "spausdinti papildomą derinimo informaciją" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "KLAIDA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nepavyksta prisijungti prie Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Šiandien" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Vakar" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Eiti į šiandieną" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Rašykite čia, kad ieškotumėte..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Nustatymai" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Pašalinti smeigtuką" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Pridėti smeigtuką" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Ištrinti iš žurnalo" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Ištrinti įvykius su šiuo URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Daugiau informacijos" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Siųsti į..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Naudota su" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Paleisti šią temą" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Ištrinti šią temą" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Veikiantys įskiepiai:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Įskiepiai" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s iki %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Veiklos žurnalas" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} su {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} su {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Prieinamas" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Neprisijungęs (-usi)" #: ../src/content_objects.py:581 msgid "Away" msgstr "Pasitraukęs (-usi)" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Užsiėmęs (-usi)" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "su" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Laiko sekiklis" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} iš {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} iš {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s prisegtukai (-ų))" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Pastaba\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "elementas" msgstr[1] "elementai" msgstr[2] "elementų" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Dirbta su video" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Dirbta su video" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Dirbta su audio" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Dirbta su paveikslėliu" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Dirbta su paveikslėliais" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Redaguotas arba skaitytas dokumentas" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Redaguoti arba skaityti dokumentai" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Redaguotas arba skaitytas kodas" #: ../src/config.py:243 msgid "Conversation" msgstr "Pokalbis" #: ../src/config.py:243 msgid "Conversations" msgstr "Pokalbiai" #: ../src/config.py:244 msgid "Visited Website" msgstr "Aplankyta internetinė svetainė" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Aplankytos internetinės svetainės" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Elektroninis laiškas" #: ../src/config.py:245 msgid "Emails" msgstr "Elektroniniai laiškai" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Kita veikla" #: ../src/config.py:247 msgid "Other Activities" msgstr "Kitos veiklos" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Redaguota arba skaityta pastaba" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Redaguotos arba skaitytos pastabos" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Muzika" #: ../src/common.py:146 msgid "Document" msgstr "Dokumentas" #: ../src/common.py:147 msgid "Image" msgstr "Paveikslėlis" #: ../src/common.py:148 msgid "Source Code" msgstr "Išeities kodas" #: ../src/common.py:149 msgid "Unknown" msgstr "Nežinoma" #: ../src/common.py:150 msgid "IM Message" msgstr "Sparčioji žinutė" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Rytas" #: ../src/common.py:936 msgid "Afternoon" msgstr "Popietė" #: ../src/common.py:936 msgid "Evening" msgstr "Vakaras" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Persijungti į MultiView" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Persijungti į ThumbView" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Persijungti į Laiko eilutės vaizdą" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Prisegti elementai" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Naršyti veiklų chronologinį žurnalą ir lengvai pasiekti failus, kontaktus ir " "t. t." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Prieinamumas" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Leisti miniatiūras kaip piktogramas" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Matomų dienų kiekis" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Pasirinktinas pagrindinio lango aukštis, pikseliais (reikalingas " "perkrovimas). Negali būti didesnis nei jūsų darbastalio dydis." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Pasirinktinas pagrindinio lango plotis, pikseliais (reikalingas " "perkrovimas). Negali būti didesnis nei jūsų darbastalio dydis." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Vienu metu rodomų dienų kiekis" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Ar turėtų specialiosios prieinamumo nuostatos būti įjungtos (reikalingas " "perkrovimas)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Ar leisti rodyti miniatiūras prie kiekvienos veiklos (reikalingas " "perkrovimas). Jei netiesa, tik bendrinės mime-tipo piktogramos bus " "naudojamos." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Lango aukštis" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Lango plotis" #~ msgid "Powered by Zeitgeist" #~ msgstr "Paremta Zeitgeist" #~ msgid "Search" #~ msgstr "Ieškoti" #~ msgid "Tags" #~ msgstr "Žymos" gnome-activity-journal-0.8.0/po/ru.po0000644000175000017500000003133011610336456017061 0ustar rainctrainct# Russian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-06-11 23:06+0000\n" "Last-Translator: Suntechnic \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-06-13 04:49+0000\n" "X-Generator: Launchpad (build 13168)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "Вывести добавочную отладочную информацию" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ОШИБКА" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Не удается подключиться к Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Сегодня" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Вчера" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Перейти к сегодняшнему дню" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Перейти к предыдущему дню " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Перейти к следующему дню" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Напишите здесь, чтоб начать поиск" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Проигрывается..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Параметры" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "О программе" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Удалить контакт" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Добавить контакт" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Удалить элемент из журнала" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Удалить все события с этим идентификатором ресурса" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Дополнительная информация" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Отправить..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Запустить объект" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Удалить эту тему" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Активные дополнения:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Дополнения" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Показать иконку в области уведомлений" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Настройка" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Загрузка журнала..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "из %s в %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Журнал активности" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} with {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Доступен" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Не в сети" #: ../src/content_objects.py:581 msgid "Away" msgstr "Отошёл" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Занят" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "с" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Учёт времени" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} из {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} из {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s вложения)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "Заметка" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "элемент" msgstr[1] "элемента" msgstr[2] "элементов" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Работа с видео" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Работа с видео" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Работа с аудио" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Работа с изображением" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Работа с изображениями" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Изменённый или прочитанный документ" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Ред. или Чтение документов" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Изменённый или прочитанный код" #: ../src/config.py:243 msgid "Conversation" msgstr "Беседа" #: ../src/config.py:243 msgid "Conversations" msgstr "Беседы" #: ../src/config.py:244 msgid "Visited Website" msgstr "Посетили веб-сайт" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Посещенные веб-сайты" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Электронная почта" #: ../src/config.py:245 msgid "Emails" msgstr "Письма" #: ../src/config.py:246 msgid "Todo" msgstr "Задача" #: ../src/config.py:246 msgid "Todos" msgstr "Задачи" #: ../src/config.py:247 msgid "Other Activity" msgstr "Другая активность" #: ../src/config.py:247 msgid "Other Activities" msgstr "Другая активность" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Изменённая или прочитанная текстовая заметка" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Изменённые или прочитанные текстовые заметки" #: ../src/config.py:249 msgid "Software Development" msgstr "Разработка ПО" #: ../src/config.py:249 msgid "Software Developments" msgstr "Разработка ПО" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Скрыть/Показать журнал активности" #: ../src/common.py:144 msgid "Video" msgstr "Видео" #: ../src/common.py:145 msgid "Music" msgstr "Музыка" #: ../src/common.py:146 msgid "Document" msgstr "Документ" #: ../src/common.py:147 msgid "Image" msgstr "Изображение" #: ../src/common.py:148 msgid "Source Code" msgstr "Исходный код" #: ../src/common.py:149 msgid "Unknown" msgstr "Неизвестно" #: ../src/common.py:150 msgid "IM Message" msgstr "Мгновенное сообщение" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Утро" #: ../src/common.py:936 msgid "Afternoon" msgstr "День" #: ../src/common.py:936 msgid "Evening" msgstr "Вечер" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Показать общий вид" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Имя: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME тип: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Показать миниатюры" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Сортировать по времени" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Закреплённые элементы" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Хронология вашей активности и лёгкое нахождение файлов, контактов и т.п." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Специальные возможности" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Разрешить миниатюры в виде значков" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Количество видимых дней" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Индивидуальные высота главного окна, в пикселях (требуется перезапуск). Не " "может быть больше, чем размер рабочего стола." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Изменяемая ширина главного окна в пикселях (требует перезагрузки " "приложения). Может быть больше размера рабочего стола." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Количество дней, которое будет отображено." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "Включить специальные опции доступа (требуется перезагрузка)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Разрешить отображения иконок к каждому типу активности (требуется " "перезагрузка). В противном случае будут использоваться только иконки типа " "MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Высота окна" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Ширина окна" #~ msgid "Search" #~ msgstr "Поиск" #~ msgid "Tags" #~ msgstr "Метки" #~ msgid "Powered by Zeitgeist" #~ msgstr "Работает на Zeitgeist" gnome-activity-journal-0.8.0/po/hr.po0000644000175000017500000002135211610336456017047 0ustar rainctrainct# Croatian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-12-15 17:24+0000\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "POGREŠKA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "Dostupno" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "Odsutan" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Zauzet" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "sa" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/zh_TW.po0000644000175000017500000002150311610336456017467 0ustar rainctrainct# Chinese (Traditional) translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-03-17 06:10+0000\n" "Last-Translator: Chao-Hsiung Liao \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-03-18 05:10+0000\n" "X-Generator: Launchpad (build 12559)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "顯示額外的除錯資訊" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "錯誤" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "無法連線至 Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "今天" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "昨天" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "移至今天" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "移至前一天 " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "移至下一天" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "在這裡輸入以搜尋..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "偏好設定" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "關於" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/po/ko.po0000644000175000017500000002450311610336456017050 0ustar rainctrainct# Korean translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-04 05:48+0000\n" "Last-Translator: sjsaltus \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "추가적인 디버깅 정보를 출력" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "오류" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Zeitgeist에 연결할 수 없습니다:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "오늘 한 일" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "어제 한 일" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "오늘 날짜로 이동" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "검색을 하려면 이곳에 입력하십시오" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "환경설정" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "\"고정(중요)표시\" 제거" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "\"고정(중요)표시\" 추가" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "저널(일지)로부터 선택한 항목을 제거합니다" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "이 URI와 관련된 모든 정보룰 제거합니다" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "실행중인 부가기능:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "부가 기능" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "활동 일지(저널)" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "온라인" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "자리비움" #: ../src/content_objects.py:582 msgid "Busy" msgstr "다른 용무중" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "항목" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "비디오 관련 작업" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "비디오 관련 작업" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "오디오 관련 작업" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "그림화일 관련 작업" #: ../src/config.py:240 msgid "Worked with Images" msgstr "그림화일 관련 작업" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "읽거나 편집한 문서" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "읽거나 편집한 문서" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "읽거나 편집한 코드" #: ../src/config.py:243 msgid "Conversation" msgstr "대화 기록-메신저" #: ../src/config.py:243 msgid "Conversations" msgstr "대화 기록-메신저" #: ../src/config.py:244 msgid "Visited Website" msgstr "방문한 웹사이트(웹페이지)" #: ../src/config.py:244 msgid "Visited Websites" msgstr "방문한 웹사이트(웹페이지)" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "이메일" #: ../src/config.py:245 msgid "Emails" msgstr "이메일" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "기타 활동" #: ../src/config.py:247 msgid "Other Activities" msgstr "기타 활동" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "읽거나 편집한 노트" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "읽거나 편집한 노트" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "비디오" #: ../src/common.py:145 msgid "Music" msgstr "음악" #: ../src/common.py:146 msgid "Document" msgstr "문서" #: ../src/common.py:147 msgid "Image" msgstr "그림" #: ../src/common.py:148 msgid "Source Code" msgstr "원본 코드" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "오전 활동 내역" #: ../src/common.py:936 msgid "Afternoon" msgstr "오후 활동 내역" #: ../src/common.py:936 msgid "Evening" msgstr "저녁 활동 내역" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "다중 날짜 보기로 전환" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "썸네일 보기로 전환" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "시간에 따른 보기로 전환" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "\"고정(중요)\"표시된 항목" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "시간대별로 활동기록을 검색하여, 연락처 또는 파일등을 쉽게 찾을 수 있다." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "썸네일을 아이콘으로 사용함" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "볼 수 있는 날짜의 수" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "메인 윈도우의 높이를 픽셀 단위로 조정함.(재시작 필요). 단, 데스크탑 사이즈보다 더 크게 할 수 없음." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "메인 윈도우의 넓이를 픽셀 단위로 조정함.(재시작 필요). 단, 데스크탑 사이즈보다 더 크게 할 수 없음." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "한번에 볼 수 있는 날짜의 수" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "창 높이" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "창 너비" #~ msgid "Search" #~ msgstr "검색" #~ msgid "Powered by Zeitgeist" #~ msgstr "Zeitgeist의 지원을 받는" #~ msgid "Tags" #~ msgstr "태그" gnome-activity-journal-0.8.0/po/id.po0000644000175000017500000002163611610336456017037 0ustar rainctrainct# Indonesian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-03-19 08:51+0000\n" "Last-Translator: GNOME Zeitgeist Team \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "GALAT" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Hari ini" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Kemarin" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Ketik disini untuk mencari..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Hapus item dari jurnal" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s ke %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "item" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Aktifitas Lainnya" #: ../src/config.py:247 msgid "Other Activities" msgstr "Aktifitas Lainnya" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Musik" #: ../src/common.py:146 msgid "Document" msgstr "Dokumen" #: ../src/common.py:147 msgid "Image" msgstr "Gambar" #: ../src/common.py:148 msgid "Source Code" msgstr "Kode Sumber" #: ../src/common.py:149 msgid "Unknown" msgstr "Tidak Dikenali" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Pagi" #: ../src/common.py:936 msgid "Afternoon" msgstr "Siang" #: ../src/common.py:936 msgid "Evening" msgstr "Malam" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Tinggi jendela" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Lebar jendela" #~ msgid "Powered by Zeitgeist" #~ msgstr "Powered by Zeitgeist" gnome-activity-journal-0.8.0/po/sl.po0000644000175000017500000002617711610336456017066 0ustar rainctrainct# Slovenian translation for gnome-activity-journal # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-31 07:46+0000\n" "Last-Translator: R33D3M33R \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Launchpad-Export-Date: 2011-02-01 04:54+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "prikaži dodatne razhroščevalne podatke" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "NAPAKA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Ni se bilo mogoče povezati z Zeitgeistom:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Danes" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Včeraj" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Pojdi na današnji dan" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Pojdi na predhodni dan " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Pojdi na naslednji dan" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Tipkajte tukaj za iskanje ..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Predvajanje ..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Možnosti" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "O" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Odstrani priponko" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Dodaj priponko" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Odstrani predmet iz Dnevnika" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Izbriši vse dogodke s tem URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Več podrobnosti" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Pošlji v ..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Uporabljeno z" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Poženi to zadevo" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Izbriši to zadevo" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Dejavni vstavki:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Vstavki" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Pokaži ikono v sistemski vrstici" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Nastavitve" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Nalaganje dnevnika ..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s v %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Dnevnik dejavnosti" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} z {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} z {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Na voljo" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Brez povezave" #: ../src/content_objects.py:581 msgid "Away" msgstr "Odsoten" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Zaseden" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "z" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Sledilnik časa" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} od {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} od {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s priloge)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Opomba\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "predmet" msgstr[1] "predmeta" msgstr[2] "predmeti" msgstr[3] "predmeti" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Delo z videom" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Delo z videi" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Delo z zvokom" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Delo s sliko" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Delo s slikami" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Urejanje ali branje dokumenta" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Urejanje ali branje dokumentov" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Urejanje ali branje kode" #: ../src/config.py:243 msgid "Conversation" msgstr "Pogovor" #: ../src/config.py:243 msgid "Conversations" msgstr "Pogovori" #: ../src/config.py:244 msgid "Visited Website" msgstr "Obisk spletne strani" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Obisk spletnih strani" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-pošta" #: ../src/config.py:245 msgid "Emails" msgstr "E-pošta" #: ../src/config.py:246 msgid "Todo" msgstr "Za narediti" #: ../src/config.py:246 msgid "Todos" msgstr "Opravila" #: ../src/config.py:247 msgid "Other Activity" msgstr "Druga dejavnost" #: ../src/config.py:247 msgid "Other Activities" msgstr "Druge dejavnosti" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Urejanje ali branje opombe" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Urejanje ali branje opomb" #: ../src/config.py:249 msgid "Software Development" msgstr "Razvoj programov" #: ../src/config.py:249 msgid "Software Developments" msgstr "Razvoji programov" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Kaži/skrij GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Glasba" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Slika" #: ../src/common.py:148 msgid "Source Code" msgstr "Izvorna koda" #: ../src/common.py:149 msgid "Unknown" msgstr "Neznano" #: ../src/common.py:150 msgid "IM Message" msgstr "Hipno sporočilo" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Zjutraj" #: ../src/common.py:936 msgid "Afternoon" msgstr "Popoldne" #: ../src/common.py:936 msgid "Evening" msgstr "Zvečer" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Preklopi v razširjen pogled" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Ime: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Vrsta mime: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Preklopi v pogled sličic" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Preklopi v pogled časovnice" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Pripeti predmeti" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Brskajte po kronološkem dnevniku svojih dejavnosti in enostavno najdite " "datoteke, stike, itn." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Dostopnost" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Dovoli sličice kot ikone" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Količina vidnih dni" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Višina glavnega okna po meri v točkah (zahteva ponovni zagon). Ne more biti " "večja kot velikost namizja." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Širina glavnega okna po meri v točkah (zahteva ponovni zagon). Ne more biti " "večja kot velikost namizja." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Količina dni, ki naj bodo naenkrat prikazani." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Ali naj bodo omogočene posebne možnosti za dostopnost (zahteva ponovni " "zagon)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Ali naj se dovoli prikaz majhnih sličic poleg vsake dejavnosti (zahteva " "ponovni zagon). Če je nastavljeno na False, bodo uporabljene le splošne " "ikone vrst MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Višina okna" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Širina okna" #~ msgid "Search" #~ msgstr "Iskanje" #~ msgid "Tags" #~ msgstr "Oznake" #~ msgid "Powered by Zeitgeist" #~ msgstr "Poganja Zeitgeist" gnome-activity-journal-0.8.0/po/sv.po0000644000175000017500000003022311610336456017063 0ustar rainctrainct# Swedish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-03-21 16:59+0000\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-03-22 04:56+0000\n" "X-Generator: Launchpad (build 12559)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "skriv ut ytterligare felsökningsinformation" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "FEL" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Kunde inte ansluta till Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Idag" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Igår" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Gå till idag" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Gå till föregående dag " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Gå till nästa dag" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Skriv här för att söka..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Spelar upp..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Inställningar" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Om" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Ta bort nål" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Lägg till nål" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Ta bort objekt från journal" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Ta bort alla händelser med denna URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Mer information" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Skicka till..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Används med" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Starta detta ämne" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Ta bort detta ämne" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Aktiva insticksmoduler:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Insticksmoduler" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Visa ikon i aktivitetsfält" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Konfiguration" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Läser in journal..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s till %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Aktivitetsjournal" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} med {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} med {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Tillgänglig" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Frånkopplad" #: ../src/content_objects.py:581 msgid "Away" msgstr "Frånvarande" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Upptagen" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "med" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Tidmätning" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} från {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} från {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s bilagor)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Observera\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "objekt" msgstr[1] "objekt" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Arbetat med en film" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Arbetat med filmer" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Arbetat med ljud" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Arbetat med en bild" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Arbetat med bilder" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Redigerat eller läst dokument" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Redigerade eller läst dokument" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Redigerat eller läst kod" #: ../src/config.py:243 msgid "Conversation" msgstr "Konversation" #: ../src/config.py:243 msgid "Conversations" msgstr "Konversationer" #: ../src/config.py:244 msgid "Visited Website" msgstr "Besökt webbplats" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Besökta webbplatser" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-post" #: ../src/config.py:245 msgid "Emails" msgstr "E-post" #: ../src/config.py:246 msgid "Todo" msgstr "Att göra" #: ../src/config.py:246 msgid "Todos" msgstr "Att göra" #: ../src/config.py:247 msgid "Other Activity" msgstr "Annan aktivitet" #: ../src/config.py:247 msgid "Other Activities" msgstr "Andra aktiviteter" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Redigerad eller Läs anteckning" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Redigerade eller Läs anteckningar" #: ../src/config.py:249 msgid "Software Development" msgstr "Programutveckling" #: ../src/config.py:249 msgid "Software Developments" msgstr "Programutveckling" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Visa/dölj GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Musik" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Bild" #: ../src/common.py:148 msgid "Source Code" msgstr "Källkod" #: ../src/common.py:149 msgid "Unknown" msgstr "Okänd" #: ../src/common.py:150 msgid "IM Message" msgstr "Snabbmeddelande" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Morgon" #: ../src/common.py:936 msgid "Afternoon" msgstr "Eftermiddag" #: ../src/common.py:936 msgid "Evening" msgstr "Kväll" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Växla till multivy" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Namn: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME-typ: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Växla till miniatyrvy" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Växla till tidslinjevy" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Nålade objekt" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Bläddra i en kronologisk logg över dina aktiviteter och hitta enkelt filer, " "kontakter etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Hjälpmedel" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Tillåt miniatyrbilder som ikoner" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Antal synliga dagar" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Anpassad höjd för huvudfönstret, i bildpunkter (kräver omstart). Får inte " "vara större än skrivbordets storlek." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Anpassad bredd för huvudfönstret, i bildpunkter (kräver omstart). Får inte " "vara större än skrivbordets storlek." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Antal dagar att visa samtidigt." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Huruvida speciella hjälpmedelsalternativ ska vara aktiverade (kräver " "omstart)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Huruvida visning av små miniatyrbilder bredvid varje aktivitet ska tillåtas " "(kräver omstart). Om False så kommer endast allmänna mimetypsikoner att " "användas." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Fönsterhöjd" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Fönsterbredd" #~ msgid "to" #~ msgstr "till" #~ msgid " Today" #~ msgstr " Idag" #~ msgid "Click today to return to today" #~ msgstr "Klicka på Idag för att återgå till idag" #~ msgid "Powered by Zeitgeist" #~ msgstr "Drivs av Zeitgeist" #~ msgid "Pin to Today" #~ msgstr "Nåla för Idag" #~ msgid "Pinned items" #~ msgstr "Nålade objekt" #, python-format #~ msgid "%s to today" #~ msgstr "%s till idag" #~ msgid "Manifestation" #~ msgstr "Manifestation" #~ msgid "Interpretation" #~ msgstr "Tolkning" #~ msgid "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgstr "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgid "Actor" #~ msgstr "Aktör" #~ msgid "Time" #~ msgstr "Tid" #~ msgid "Click to return to multiday view" #~ msgstr "Klicka för att återgå till flerdagsvy" #~ msgid "Right click for a thumbnail view" #~ msgstr "Högerklicka för en miniatyrbildsvy" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Vänsterklicka för en detaljerad tidslinjevy" #~ msgid "Related Items" #~ msgstr "Relaterade objekt" #~ msgid "Subject Interpretation" #~ msgstr "Ämnestolkning" #~ msgid "Search" #~ msgstr "Sök" #~ msgid "Tags" #~ msgstr "Taggar" gnome-activity-journal-0.8.0/po/en_GB.po0000644000175000017500000002542011610336456017410 0ustar rainctrainct# English (United Kingdom) translation for gnome-activity-journal # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-06-12 23:55+0000\n" "Last-Translator: Aldo Mann \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-06-14 04:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "print additional debugging information" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERROR" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Unable to connect to Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Today" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Yesterday" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Go to Today" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Go to the previous day " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Go to the next day" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Type here to search..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Playing..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferences" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "About" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Remove Pin" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Add Pin" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Delete item from Journal" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Delete all events with this URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "More Information" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Send To..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Used With" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Launch this subject" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Delete this subject" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Active Plugins:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Plugins" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Show icon in system tray" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Configuration" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Loading Journal..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s to %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Activity Journal" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} with {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Available" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Offline" #: ../src/content_objects.py:581 msgid "Away" msgstr "Away" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Busy" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "with" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Time Tracker" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} from {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Attachments)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Note\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "item" msgstr[1] "items" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Worked with a Video" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Worked with Videos" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Worked with Audio" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Worked with an Image" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Worked with Images" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Edited or Read Document" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Edited or Read Documents" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Edited or Read Code" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversation" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversations" #: ../src/config.py:244 msgid "Visited Website" msgstr "Visited Website" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Visited Websites" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "Emails" #: ../src/config.py:246 msgid "Todo" msgstr "Todo" #: ../src/config.py:246 msgid "Todos" msgstr "Todos" #: ../src/config.py:247 msgid "Other Activity" msgstr "Other Activity" #: ../src/config.py:247 msgid "Other Activities" msgstr "Other Activities" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Edited or Read Note" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Edited or Read Notes" #: ../src/config.py:249 msgid "Software Development" msgstr "Software Development" #: ../src/config.py:249 msgid "Software Developments" msgstr "Software Developments" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Hide/Show GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Music" #: ../src/common.py:146 msgid "Document" msgstr "Document" #: ../src/common.py:147 msgid "Image" msgstr "Image" #: ../src/common.py:148 msgid "Source Code" msgstr "Source Code" #: ../src/common.py:149 msgid "Unknown" msgstr "Unknown" #: ../src/common.py:150 msgid "IM Message" msgstr "IM Message" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Morning" #: ../src/common.py:936 msgid "Afternoon" msgstr "Afternoon" #: ../src/common.py:936 msgid "Evening" msgstr "Evening" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Switch to MultiView" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Name: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME Type: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Switch to ThumbView" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Switch to TimelineView" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Pinned Items" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accessibility" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Allow thumbnails as icons" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Amount of visible days" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "The amount of days to show at once." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Whether special accessibility options should be enabled (requires restart)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Window height" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Window width" gnome-activity-journal-0.8.0/po/eu.po0000644000175000017500000002643711610336456017060 0ustar rainctrainct# Basque translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-05-18 15:22+0000\n" "Last-Translator: Asier Sarasua Garmendia \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-05-19 04:51+0000\n" "X-Generator: Launchpad (build 12959)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "inprimatu arazketa-informazio gehigarria" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERROREA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Ezin izan da Zeitgeist-era konektatu:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Gaur" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Atzo" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Joan Gaur egunera" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Joan aurreko egunera " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Joan hurrengo egunera" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Idatzi hemen bilaketa egiteko..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Erreproduzitzen..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Hobespenak" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Honi buruz" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Kendu pin-a" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Gehitu pin-a" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Ezabatu elementua egunkaritik" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Ezabatu URI hau daukaten elementu guztiak" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Informazio gehiago" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Bidali hona..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Honekin erabilia" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Abiarazi gai hau" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Ezabatu gai hau" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Plugin aktiboak:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Pluginak" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Erakutsi ikonoa sistemaren erretiluan" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Konfigurazioa" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Journal kargatzen..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s-(e)tik %s-(e)ra" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Jarduera-egunkaria" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}-(e)kin" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} {event.subjects[0].text}-(e)kin\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Eskuragarri" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Lineaz kanpo" #: ../src/content_objects.py:581 msgid "Away" msgstr "Kanpoan" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Lanpetuta" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "honekin:" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Denbora-aztarnaria" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}-(e)tik" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} {event.subjects[0].text}-(e)tik\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s eranskin)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Oharra\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "elementu" msgstr[1] "elementu" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Bideo batekin prestatua" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Bideoekin prestatua" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Audio batekin prestatua" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Irudi batekin prestatua" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Irudiekin prestatua" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Dokumentu editatu edo irakurria" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Dokumentu editatu edo irakurriak" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Kode editatu edo irakurria" #: ../src/config.py:243 msgid "Conversation" msgstr "Berriketa" #: ../src/config.py:243 msgid "Conversations" msgstr "Berriketak" #: ../src/config.py:244 msgid "Visited Website" msgstr "Bisitatutako webgunea" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Bisitatutako webguneak" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Posta elektronikoa" #: ../src/config.py:245 msgid "Emails" msgstr "Posta elektronikoak" #: ../src/config.py:246 msgid "Todo" msgstr "Egiteke" #: ../src/config.py:246 msgid "Todos" msgstr "Egitekoak" #: ../src/config.py:247 msgid "Other Activity" msgstr "Beste jarduera bat" #: ../src/config.py:247 msgid "Other Activities" msgstr "Beste jarduera batzuk" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Ohar editatu edo irakurria" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Ohar editatu edo irakurriak" #: ../src/config.py:249 msgid "Software Development" msgstr "Software-garapena" #: ../src/config.py:249 msgid "Software Developments" msgstr "Software-garapenak" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Ezkutatu/erakutsi GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Bideoa" #: ../src/common.py:145 msgid "Music" msgstr "Musika" #: ../src/common.py:146 msgid "Document" msgstr "Dokumentua" #: ../src/common.py:147 msgid "Image" msgstr "Irudia" #: ../src/common.py:148 msgid "Source Code" msgstr "Iturburu-kodea" #: ../src/common.py:149 msgid "Unknown" msgstr "Ezezaguna" #: ../src/common.py:150 msgid "IM Message" msgstr "IM mezua" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Goiza" #: ../src/common.py:936 msgid "Afternoon" msgstr "Arratsaldea" #: ../src/common.py:936 msgid "Evening" msgstr "Ilunabarra" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Aldatu bistaratze anitzera" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Izena: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME mota: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Aldatu miniatura-bistaratzera" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Aldatu denbora-lerroaren bistaratzera" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Finkatutako elementuak" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Arakatu zure jardueren egunkari kronologikoa eta bilatu fitxategiak, " "kontaktuak, etab. modu errazean." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Erabilerraztasuna" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Onartu miniaturak ikono modura" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Ikusgarri den egun-kopurua" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Leiho nagusiaren altuera pertsonalizatua, pixeletan (berrabiaraztea behar " "du). Ezin da izan mahaigainaren tamaina baino handiagoa." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Leiho nagusiaren zabalera pertsonalizatua, pixeletan (berrabiaraztea behar " "du). Ezin da izan mahaigainaren tamaina baino handiagoa." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Aldi berean erakutsiko den egun-kopurua." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Erabilerraztasun-aukera bereziak gaituko diren ala ez (berrabiaraztea behar " "du)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Jarduera bakoitzaren alboan miniatura txikiak erakustea ahalbidetuko den ala " "ez (berrabiaraztea behar du). Gezurra bada, mime-type ikono generikoak " "soilik erabiliko dira." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Leiho-altuera" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Leiho-zabalera" #~ msgid "Search" #~ msgstr "Bilatu" #~ msgid "Tags" #~ msgstr "Etiketak" #~ msgid "Powered by Zeitgeist" #~ msgstr "Zeitgeist-ekin dabil" gnome-activity-journal-0.8.0/po/bg.po0000644000175000017500000003171211610336456017027 0ustar rainctrainct# Bulgarian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-02-11 06:56+0000\n" "Last-Translator: Svetoslav Stefanov \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-02-12 05:19+0000\n" "X-Generator: Launchpad (build 12351)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "извеждане на допълнителна информация за изчистване на грешки" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ГРЕШКА" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Невъзможност за свързване с Zaitgeist" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Днес" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Вчера" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Отиване на днешната дата" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Отиване към предишния ден " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Отиване към следващия ден" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Пишете тук за да търсите" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Възпроизвеждане..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Предпочитания" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Относно" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Премахване на отметка" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Добавяне на отметка" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Изтриване от Дневника" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Изтриване на всички събития с този адрес" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Повече информация" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Изпращане до…" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Използвано с" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Пускане на тази тема" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Изтриване на тази тема" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Активни приставки" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Приставки" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Показване на икона в системната област за уведомяване" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Настройка" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Зареждане на дневника..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s до %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Дневник на действията" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} с {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} с {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Наличен" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Извън мрежата" #: ../src/content_objects.py:581 msgid "Away" msgstr "Отсъстващ" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Зает" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "с" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Часова лента" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} от {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} от {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s прикачени)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Бележка\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "елемент" msgstr[1] "елементи" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Работа с видео" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Работа с видео" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Работа със звук" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Работа с изображение" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Работа с изображения" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Редактиране или четене на документ" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Редактиране или четене на документи" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Редактиране или четене на код" #: ../src/config.py:243 msgid "Conversation" msgstr "Разговор" #: ../src/config.py:243 msgid "Conversations" msgstr "Разговори" #: ../src/config.py:244 msgid "Visited Website" msgstr "Посетена уеб страница" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Посетени уеб страници" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Е-писмо" #: ../src/config.py:245 msgid "Emails" msgstr "Е-писма" #: ../src/config.py:246 msgid "Todo" msgstr "За правене" #: ../src/config.py:246 msgid "Todos" msgstr "Задачи" #: ../src/config.py:247 msgid "Other Activity" msgstr "Друга дейност" #: ../src/config.py:247 msgid "Other Activities" msgstr "Други дейности" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Редактиране или четене на бележка" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Редактиране или четене на бележки" #: ../src/config.py:249 msgid "Software Development" msgstr "Разработка на софтуер" #: ../src/config.py:249 msgid "Software Developments" msgstr "Разработки на софтуер" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Скриване/Показване" #: ../src/common.py:144 msgid "Video" msgstr "Видео" #: ../src/common.py:145 msgid "Music" msgstr "Музика" #: ../src/common.py:146 msgid "Document" msgstr "Документ" #: ../src/common.py:147 msgid "Image" msgstr "Изображение" #: ../src/common.py:148 msgid "Source Code" msgstr "Изходен код" #: ../src/common.py:149 msgid "Unknown" msgstr "Неизвестно" #: ../src/common.py:150 msgid "IM Message" msgstr "Съобщение" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Сутрин" #: ../src/common.py:936 msgid "Afternoon" msgstr "Следобед" #: ../src/common.py:936 msgid "Evening" msgstr "Вечер" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Превключване към паралелен изглед" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Име: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Вид MIME: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Преминаване към мозаечен изглед" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Превключване към хронологичен изглед" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Отметки" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Разглеждайте хронологичен запис на вашите дейности и лесно откривайте " "файлове, контакти и т. н." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Достъпност" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Позволяване на миниатюрите като икони" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Брой видими дни" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Потребителска височина на основния прозорец, в пиксели (изисква " "рестартиране). Не може да е по-голява от размера на работния плот." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Потребителска широчина на основния прозорец, в пиксели (изисква " "рестартиране). Не може да е по-голява от размера на работния плот." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Брой едновременно показвани дни." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Дали да са включени специалните настройки за достъпност (изисква " "рестартиране)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Дали да се показват малки миниатюри до всяка дейност (изисква рестартиране). " "Ако не е истина, ще се показват само общи икони на типовете файлове." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Височина на прозореца" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Широчина на прозореца" #~ msgid "Search" #~ msgstr "Търсене" #~ msgid "Tags" #~ msgstr "Етикети" #~ msgid "Powered by Zeitgeist" #~ msgstr "Захранвано от Zeitgeist" gnome-activity-journal-0.8.0/po/pl.po0000644000175000017500000002721611610336456017056 0ustar rainctrainct# Polish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # Piotr Drąg , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: zeitgeist@lists.launchpad.net\n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-23 16:57+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" "Language: pl\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "wyświetla dodatkowe informacje o debugowaniu" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "BŁĄD" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nie można połączyć się z usługą Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Dzisiaj" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Wczoraj" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Przejdź do dzisiaj" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Przechodzi do poprzedniego dnia " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Przechodzi do następnego dnia" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Wpisanie w tym miejscu rozpocznie wyszukiwanie..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Odtwarzanie..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferencje" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "O programie" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Usuń przypięcie" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Dodaj przypięcie" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Usuń element z dziennika" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Usuń wszystkie zdarzenia z tym adresem URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Więcej informacji" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Wyślij do..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Użyte za pomocą" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Uruchom ten temat" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Usuń ten temat" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Aktywne wtyczki:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Wtyczki" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "Wyświetlanie ikony w obszarze powiadamiania" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Konfiguracja" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "Wczytywanie dziennika..." #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s do %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Dziennik aktywności" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} za pomocą {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} za pomocą {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Dostępny" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Offline" #: ../src/content_objects.py:581 msgid "Away" msgstr "Zaraz wracam" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Zajęty" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "za pomocą" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Mierzenie czasu" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} z {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} z {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (załączników: %s)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Wpis\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "element" msgstr[1] "elementy" msgstr[2] "elementów" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Praca z plikiem wideo" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Praca z plikami wideo" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Praca z plikiem dźwiękowym" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Praca z plikiem obrazu" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Praca z plikami obrazów" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Modyfikacja lub odczytanie dokumentu" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Modyfikacja lub odczytanie dokumentów" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Modyfikacja lub odczytanie kodu źródłowego" #: ../src/config.py:243 msgid "Conversation" msgstr "Rozmowa" #: ../src/config.py:243 msgid "Conversations" msgstr "Rozmowy" #: ../src/config.py:244 msgid "Visited Website" msgstr "Odwiedzono stronę WWW" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Odwiedzono strony WWW" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Wiadomość e-mail" #: ../src/config.py:245 msgid "Emails" msgstr "Wiadomości e-mail" #: ../src/config.py:246 msgid "Todo" msgstr "Do zrobienia" #: ../src/config.py:246 msgid "Todos" msgstr "Do zrobienia" #: ../src/config.py:247 msgid "Other Activity" msgstr "Inna czynność" #: ../src/config.py:247 msgid "Other Activities" msgstr "Inne czynności" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Modyfikacja lub odczytanie wpisu" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Modyfikacja lub odczytanie wpisu" #: ../src/config.py:249 msgid "Software Development" msgstr "Tworzenie oprogramowania" #: ../src/config.py:249 msgid "Software Developments" msgstr "Tworzenie oprogramowania" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "Wyświetlanie/ukrycie GAJ" #: ../src/common.py:144 msgid "Video" msgstr "Wideo" #: ../src/common.py:145 msgid "Music" msgstr "Muzyka" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Obraz" #: ../src/common.py:148 msgid "Source Code" msgstr "Kod źródłowy" #: ../src/common.py:149 msgid "Unknown" msgstr "Nieznany" #: ../src/common.py:150 msgid "IM Message" msgstr "Wiadomość komunikatora" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Poranek" #: ../src/common.py:936 msgid "Afternoon" msgstr "Popołudnie" #: ../src/common.py:936 msgid "Evening" msgstr "Wieczór" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Przełącz do widoku \"MultiView\"" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Nazwa: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "Typ MIME: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Przełącz do widoku \"ThumbView\"" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Przełącz do widoku \"TimelineView\"" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Przypięte elementy" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Przeglądanie chronologicznego dziennika aktywności oraz łatwe wyszukiwanie " "plików, kontaktów itp." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Dostępność" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Zezwolenie na używanie miniatur jako ikon" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Liczba widocznych dni" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Dostosowana wysokość głównego okna w pikselach (wymaga ponownego " "uruchomienia programu). Nie może być większe niż rozmiar pulpitu." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Dostosowana szerokość głównego okna w pikselach (wymaga ponownego " "uruchomienia programu). Nie może być większe niż rozmiar pulpitu." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Liczba dni wyświetlanych za jednym razem." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Określa, czy specjalne opcje dostępności powinny być włączone (wymaga " "ponownego uruchomienia programu)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Określa, czy zezwalać na wyświetlanie miniatur obok każdej aktywności " "(wymaga ponownego uruchomienia programu). Jeśli ustawione na wartość " "\"False\", tylko ogólne ikony typów MIME będą używane." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Wysokość okna" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Szerokość okna" #~ msgid "Tags" #~ msgstr "Etykiety" #~ msgid "Powered by Zeitgeist" #~ msgstr "Korzysta z usługi Zeitgeist" #~ msgid "Search" #~ msgstr "Wyszukaj" gnome-activity-journal-0.8.0/po/fi.po0000644000175000017500000002160411610336456017034 0ustar rainctrainct# Finnish translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-01-10 07:39+0000\n" "Last-Translator: Tomi Juntunen \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "VIRHE" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Yhteyttä Zeitgeistiin ei voitu luoda:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Tänään" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Eilen" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Sähköposti" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Muu toiminta" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Musiikki" #: ../src/common.py:146 msgid "Document" msgstr "Asiakirja" #: ../src/common.py:147 msgid "Image" msgstr "Kuva" #: ../src/common.py:148 msgid "Source Code" msgstr "Lähdekoodi" #: ../src/common.py:149 msgid "Unknown" msgstr "Tuntematon" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Aamupäivä" #: ../src/common.py:936 msgid "Afternoon" msgstr "Iltapäivä" #: ../src/common.py:936 msgid "Evening" msgstr "Ilta" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Esteettömyys" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Näytettävien päivien määrä" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Kerralla näytettävien päivien määrä" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Ikkunan korkeus" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Ikkunan leveys" gnome-activity-journal-0.8.0/po/el.po0000644000175000017500000003132111610336456017033 0ustar rainctrainct# Greek translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-11-14 14:20+0000\n" "Last-Translator: Μάριος Ζηντίλης \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "εμφάνιση επιπρόσθετων πληροφοριών αποσφαλμάτωσης" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ΣΦΑΛΜΑ" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Αδυναμία σύνδεσης με το Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Σήμερα" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Χθες" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Σημερινή μέρα" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Όροι αναζήτησης..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Προτιμήσεις" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Ξεκαρφίτσωμα" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Καρφίτσωμα" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Διαγραφή από το Ημερολόγιο" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Διαγραφή των γεγονότων με το ίδιο URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Περισσότερες πληροφορίες" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Αποστολή προς..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Χρησιμοποιήθηκε ταυτόχρονα με" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Έναρξη αυτού του θέματος" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Διαγραφή αυτού του θέματος" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Ενεργές πρόσθετες λειτουργίες:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Πρόσθετες λειτουργίες" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s σε %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Ημερολόγιο δραστηριοτήτων" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} με {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} με {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Διαθέσιμος/η" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Εκτός σύνδεσης" #: ../src/content_objects.py:581 msgid "Away" msgstr "Απουσιάζει" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Απασχολημένος/η" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "με" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Καταγραφή χρόνου" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} από {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} από {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Συνημμένα)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Σημείωση\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "αντικείμενο" msgstr[1] "αντικείμενα" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Εργασία με ένα Βίντεο" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Εργασία με πολλά Βίντεο" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Εργασία με Ήχο" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Εργασία με Ήχους" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Εργασία με Εικόνες" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Επεξεργασία ή ανάγνωση ενός Εγγράφου" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Επεργασία ή ανάγνωση πολλαπλών Εγγράφων" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Επεξεργασία ή ανάγνωση Κώδικα" #: ../src/config.py:243 msgid "Conversation" msgstr "Συνομιλία" #: ../src/config.py:243 msgid "Conversations" msgstr "Συνομιλίες" #: ../src/config.py:244 msgid "Visited Website" msgstr "Επίσκεψη ιστότοπου" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Επίσκεψη ιστότοπων" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Μήνυμα αλληλογραφίας" #: ../src/config.py:245 msgid "Emails" msgstr "Μηνύματα αλληλογραφίας" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Άλλη δραστηριότητα" #: ../src/config.py:247 msgid "Other Activities" msgstr "Άλλες δραστηριότητες" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Επεξεργασία ή ανάγνωση σημείωσης" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Επεξεργασία ή ανάγνωση σημειώσεων" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Βίντεο" #: ../src/common.py:145 msgid "Music" msgstr "Μουσική" #: ../src/common.py:146 msgid "Document" msgstr "Έγγραφο" #: ../src/common.py:147 msgid "Image" msgstr "Εικόνα" #: ../src/common.py:148 msgid "Source Code" msgstr "Πηγαίος κώδικας" #: ../src/common.py:149 msgid "Unknown" msgstr "Άγνωστο" #: ../src/common.py:150 msgid "IM Message" msgstr "Άμεσο μήνυμα" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Πρωί" #: ../src/common.py:936 msgid "Afternoon" msgstr "Απόγευμα" #: ../src/common.py:936 msgid "Evening" msgstr "Βράδυ" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Πολλαπλή προβολή" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Προβολή εικονιδίων" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Προβολή χρονογραμμής" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Καρφιτσωμένα αντικείμενα" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Περιήγηση μιας χρονολογικής καταγραφής των δραστηριοτήτων σας, για εύκολη " "εύρεση αρχείων, επαφών, κλπ." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Προσιτότητα" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Να επιτρέπονται μικρογραφίες ως εικονίδια" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Πλήθος προβαλλόμενων ημερών" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Προσαρμοσμένο ύψος για το κύριο παράθυρο, σε εικονοστοιχεία (απαιτεί " "επανεκκίνηση). Δεν μπορεί να είναι μεγαλύτερο από το μέγεθος της επιφάνειας " "εργασίας." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Προσαρμοσμένο πλάτος για το κύριο παράθυρο, σε εικονοστοιχεία (απαιτεί " "επανεκκίνηση). Δεν μπορεί να είναι μεγαλύτερο από το μέγεθος της επιφάνειας " "εργασίας." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Το πλήθος των ημερών που θα εμφανίζονται ανά πάσα στιγμή." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Κατά πόσο θα ενεργοποιηθούν ειδικές επιλογές προσιτότητας (απαιτείται " "επανεκκίνηση)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Κατά πόσο θα επιτρέπεται η εμφάνιση μικρογραφιών δίπλα σε κάθε δραστηριότητα " "(απαιτείται επανεκκίνηση). Αν απενεργοποιηθεί, θα εμφανίζονται μόνο γενικά " "εικονίδια τύπου MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Ύψος παραθύρου" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Πλάτος παραθύρου" #~ msgid "Powered by Zeitgeist" #~ msgstr "Με τη δύναμη του Zeitgeist" #~ msgid "Search" #~ msgstr "Αναζήτηση" #~ msgid "Tags" #~ msgstr "Ετικέτες" gnome-activity-journal-0.8.0/po/ast.po0000644000175000017500000002546511610336456017236 0ustar rainctrainct# Asturian translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-10-31 00:57+0000\n" "Last-Translator: Xuacu Saturio \n" "Language-Team: Asturian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "amosar información de depuración adicional" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "ERROR" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nun se pudo coneutar con Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Güei" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Ayeri" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Dir a güei" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Escribe equí pa guetar..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Preferencies" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Quitar pinchu" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "Pinchar" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Desaniciar elementu del Diariu" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "Desaniciar tolos eventos con esti URI" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Más Información" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Unviar a…" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "Usáu con" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "Llanzar esti asuntu" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "Desaniciar esti asuntu" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "Complementos activos:" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Complementos" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s a %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Diariu d'actividá" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} con {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} con {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "Disponible" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Ensin conexón" #: ../src/content_objects.py:581 msgid "Away" msgstr "Ausente" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Ocupáu" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "con" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "Xestor de tiempu" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "{source._desc_sing} de {event.subjects[0].text}" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} de {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Axuntos)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Nota\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "elementu" msgstr[1] "elementos" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Trabayó con un videu" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Trabayó con videos" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Trabayó con soníu" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Trabayó con una imaxen" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Trabayó con imáxenes" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Documentu editáu o lleíu" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Documentos editaos o lleíos" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Códigu editáu o lleíu" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversación" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversaciones" #: ../src/config.py:244 msgid "Visited Website" msgstr "Sitiu web visitáu" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Sitios web visitaos" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Corréu electrónicu" #: ../src/config.py:245 msgid "Emails" msgstr "Correos electrónicos" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Otra actividá" #: ../src/config.py:247 msgid "Other Activities" msgstr "Otres actividaes" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "Nota editada o lleída" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "Notes editaes o lleíes" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Videu" #: ../src/common.py:145 msgid "Music" msgstr "Música" #: ../src/common.py:146 msgid "Document" msgstr "Documentu" #: ../src/common.py:147 msgid "Image" msgstr "Imaxe" #: ../src/common.py:148 msgid "Source Code" msgstr "Códigu fonte" #: ../src/common.py:149 msgid "Unknown" msgstr "Desconocíu" #: ../src/common.py:150 msgid "IM Message" msgstr "Mensaxe nel intre" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Mañana" #: ../src/common.py:936 msgid "Afternoon" msgstr "Tardi" #: ../src/common.py:936 msgid "Evening" msgstr "Nuechi" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "Cambear a vista múltiple" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "Cambear a vista de miniatures" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "Cambear a vista de llinia de tiempu" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "Artículos pinchaos" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Revisa un rexistru cronolóxicu de les actividaes y alcuentra fácilmente " "ficheros, contautos, etc." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Accesibilidá" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Permitir miniatures como iconos" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Cantidá de díes visibles" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Altor personalizáu de la ventana principal, en pixels (requier reaniciar). " "Nun pue ser mayor que'l tamañu del escritoriu." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Anchor personalizáu de la ventana principal, en pixels (requier reaniciar). " "Nun pue ser mayor que'l tamañu del escritoriu." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Cantidá de díes qu'amosar a la vez." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "Indica si tienen d'activase les opciones especiales d'accesibilidá (requier " "reaniciar)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Indica si se permite amosar miniatures xunto a cada actividá (requier " "reaniciar). Si ye falso, sólo s'usarán los iconos xenéricos del tipu MIME." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Altor de la ventana" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Anchor de la ventana" #~ msgid "Powered by Zeitgeist" #~ msgstr "Col sofitu de Zeitgeist" #~ msgid "Search" #~ msgstr "Guetar" #~ msgid "Tags" #~ msgstr "Etiquetes" gnome-activity-journal-0.8.0/po/POTFILES.in.in0000644000175000017500000000021111364052224020241 0ustar rainctrainctgnome-activity-journal src/*.py src/histogramwidget/*.py extra/gnome-activity-journal.desktop.in extra/gnome-activity-journal.schemas.in gnome-activity-journal-0.8.0/po/nl.po0000644000175000017500000002352611610336456017054 0ustar rainctrainctmsgid "" msgstr "" "Project-Id-Version: GNOME Activity Journal\n" "Report-Msgid-Bugs-To: zeitgeist@lists.launchpad.net\n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-04-20 13:04+0000\n" "Last-Translator: Rachid \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-04-21 04:52+0000\n" "X-Generator: Launchpad (build 12758)\n" "X-Poedit-Country: NETHERLANDS\n" "X-Poedit-Language: Dutch\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "FOUT" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "vandaag" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "gisteren" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "Ga naar vandaag" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "Ga naar de vorige dag " #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "Ga naar de volgende dag" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Type hier om te zoeken..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "Afspelen..." #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "Voorkeuren" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "Over" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Verwijder punaise" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Meer Informatie" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Verzenden naar..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "Plug-ins" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "Configuratie" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Activiteitendagboek" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "Beschikbaar" #: ../src/content_objects.py:580 msgid "Offline" msgstr "Offline" #: ../src/content_objects.py:581 msgid "Away" msgstr "Afwezig" #: ../src/content_objects.py:582 msgid "Busy" msgstr "Bezet" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} van {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr " (%s Bijlagen)" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "{event.subjects[0].text}" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" "Noot\n" "{event.subjects[0].text}" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "item" msgstr[1] "items" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Met een video gewerkt" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Met video's gewerkt" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Met audio gewerkt" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Met afbeelding gewerkt" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Met afbeeldingen gewerkt" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Document gelezen of bewerkt" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Bewerkte of gelezen documenten" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Code bewerkt of gelezen" #: ../src/config.py:243 msgid "Conversation" msgstr "Conversatie" #: ../src/config.py:243 msgid "Conversations" msgstr "Conversaties" #: ../src/config.py:244 msgid "Visited Website" msgstr "Bezochte website" #: ../src/config.py:244 msgid "Visited Websites" msgstr "Bezochte websites" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "E-mail" #: ../src/config.py:245 msgid "Emails" msgstr "E-mails" #: ../src/config.py:246 msgid "Todo" msgstr "Nog te doen" #: ../src/config.py:246 msgid "Todos" msgstr "Taken" #: ../src/config.py:247 msgid "Other Activity" msgstr "Andere activiteit" #: ../src/config.py:247 msgid "Other Activities" msgstr "Andere activiteiten" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "Software-ontwikkeling" #: ../src/config.py:249 msgid "Software Developments" msgstr "Software-ontwikkelingen" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Muziek" #: ../src/common.py:146 msgid "Document" msgstr "Document" #: ../src/common.py:147 msgid "Image" msgstr "Afbeelding" #: ../src/common.py:148 msgid "Source Code" msgstr "Broncode" #: ../src/common.py:149 msgid "Unknown" msgstr "Onbekend" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Ochtend" #: ../src/common.py:936 msgid "Afternoon" msgstr "Middag" #: ../src/common.py:936 msgid "Evening" msgstr "Avond" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "Naam: " #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" "\n" "MIME Type: %s (%s)" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Blader door een chronologisch dagboek van je activiteiten om gemakkelijk " "bestanden terug te vinden." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Toegankelijkheid" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Vensterhoogte" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Vensterbreedte" #~ msgid "Go Back in Time" #~ msgstr "Ga terug in de tijd" #~ msgid "Look into the Future" #~ msgstr "Kijk in de toekomst" #~ msgid "Jump to Today" #~ msgstr "Spring naar vandaag" #~ msgid "Pin to Today" #~ msgstr "Pin vast aan vandaag" #~ msgid "Pinned items" #~ msgstr "Vastgepind" #~ msgid "Today " #~ msgstr "vandaag " gnome-activity-journal-0.8.0/po/ml.po0000644000175000017500000003624711610336456017057 0ustar rainctrainct# Malayalam translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-07-15 05:06+0000\n" "Last-Translator: GNOME Zeitgeist Team \n" "Language-Team: Malayalam \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "കൂടുതല്‍ ഡീബഗ്ഗിംഗ് വിവരങ്ങള്‍ അച്ചടിക്കുക" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "തെറ്റ്‌" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Zeitgeist-ആയി ബന്ധപ്പെടാന്‍ കഴിഞ്ഞില്ല:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "ഇന്ന്" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "ഇന്നലെ" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "തിരയുവാനായി ഇവിടെ ടൈപ്പ് ചെയ്യുക..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "പിന്‍ മാറ്റുക" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "ജേര്‍ണലില്‍ നിന്നും വസ്തു നീക്കം ചെയ്യുക" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "ഈ URI ഉപയോഗിച്ച് എല്ലാ സംഭവങ്ങളും നീക്കം ചെയ്യുക" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "കൂടുതല്‍ വിവരങ്ങള്‍" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "അയക്കുക..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s മുതല്‍ %s വരെ" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "ആക്ടിവിറ്റി ജേര്‍ണല്‍" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "{source._desc_sing} കൂടെ {event.subjects[0].text}" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" "{source._desc_sing} കൂടെ {event.subjects[0].text}\n" "{event.subjects[0].uri}" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "കൂടെ" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "{source._desc_sing} {event.subjects[0].text}" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "ഇനം" msgstr[1] "ഇനങ്ങള്‍" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "ചലച്ചിത്രവുമായി പ്രവര്‍ത്തിച്ചു" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "ചലച്ചിത്രങ്ങളുമായി പ്രവര്‍ത്തിച്ചു" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "ശബ്ദവുമായി പ്രവര്‍ത്തിച്ചു" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "ചിത്രവുമായി പ്രവര്‍ത്തിച്ചു" #: ../src/config.py:240 msgid "Worked with Images" msgstr "ചിത്രങ്ങളുമായി പ്രവര്‍ത്തിച്ചു" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "ചിട്ടപ്പെടുത്തിയിരിക്കുന്ന അല്ലെങ്കില്‍ വായിച്ചിരിക്കുന്ന പ്രമാണം" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" "ചിട്ടപ്പെടുത്തിയിരിക്കുന്ന അല്ലെങ്കില്‍ വായിച്ചിരിക്കുന്ന പ്രമാണങ്ങള്‍" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "ചിട്ടപ്പെടുത്തിയിരിക്കുന്ന അല്ലെങ്കില്‍ വായിച്ചിരിക്കുന്ന കോഡ്" #: ../src/config.py:243 msgid "Conversation" msgstr "സംഭാഷണം" #: ../src/config.py:243 msgid "Conversations" msgstr "സംഭാഷണങ്ങള്‍" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "ഈമെയില്‍" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "മറ്റു പ്രവര്‍ത്തനം" #: ../src/config.py:247 msgid "Other Activities" msgstr "മറ്റു പ്രവര്‍ത്തനങ്ങള്‍" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "ചലച്ചിത്രം" #: ../src/common.py:145 msgid "Music" msgstr "സംഗീതം" #: ../src/common.py:146 msgid "Document" msgstr "രേഖ" #: ../src/common.py:147 msgid "Image" msgstr "ചിത്രം" #: ../src/common.py:148 msgid "Source Code" msgstr "മൂല പ്രമാണം" #: ../src/common.py:149 msgid "Unknown" msgstr "അജ്ഞാതം" #: ../src/common.py:150 msgid "IM Message" msgstr "ഐഎം സന്ദേശം" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "പ്രഭാതം" #: ../src/common.py:936 msgid "Afternoon" msgstr "അപരാഹ്നം" #: ../src/common.py:936 msgid "Evening" msgstr "വൈകുന്നേരം" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "കാലഗതി അനുസരിച്ചുള്ള നിങ്ങളുടെ പ്രവര്‍ത്തികളുടെ ഒരു ലോഗ് പരതുകയും, " "എളുപ്പത്തില്‍ ഫയലുകള്‍, വിലാസങ്ങള്‍ തുടങ്ങിയവ കണ്ടെത്തുക." #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "ഉപയോഗക്ഷമത" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "നഖചിത്രങ്ങള്‍ ഐക്കനുകള്‍ ആയി ഉപയോഗിക്കാന്‍ അനുവദിക്കുക" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "ഗോചരമായ ദിവസങ്ങളുടെ എണ്ണം" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "പ്രധാന ജാലകത്തിനു നിര്‍ദ്ദേശിക്കുന്ന ഉയരം, പിക്സലുകളില്‍ (റീസ്റ്റാര്‍ട്ട്‌ " "ആവശ്യമാണ്). ടെസ്ക്ടോപിന്റെ വലുപ്പത്തേക്കാള്‍ കൂടുതലാകാന്‍ പാടില്ല." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "പ്രധാന ജാലകത്തിനു നിര്‍ദ്ദേശിക്കുന്ന വീതി, പിക്സലുകളില്‍ (റീസ്റ്റാര്‍ട്ട്‌ " "ആവശ്യമാണ്). ടെസ്ക്ടോപിന്റെ വലുപ്പത്തേക്കാള്‍ കൂടുതലാകാന്‍ പാടില്ല." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "ഒന്നിച്ചു കാണിക്കേണ്ട ദിവസങ്ങളുടെ എണ്ണം." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" "പ്രത്യേക സാമീപ്യതാ ഐശ്ചികങ്ങള്‍ സജീവമാക്കണോ എന്നു (റീസ്റ്റാര്‍ട്ട്‌ " "ആവശ്യമാണ്)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "ഓരോ പ്രവര്‍ത്തനത്തിനും അരികിലായി ചെറിയ നഖചിത്രങ്ങള്‍ കാണിക്കുന്നത് " "അനുവദിക്കണോ എന്നു (റീസ്റ്റാര്‍ട്ട്‌ ആവശ്യമാണ്). വേണ്ട എന്നാണെങ്കില്‍, " "പൊതുവായ mime-തരം ഐക്കണുകള്‍ ഉപയോഗിക്കും." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "ജാലകത്തിന്റെ ഉയരം" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "ജാലകത്തിന്റെ വീതി" #~ msgid "" #~ "Tomboy\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgstr "" #~ "ടോംബോയ്\n" #~ "{source._desc_sing} {event.subjects[0].text}" #~ msgid "Powered by Zeitgeist" #~ msgstr "Zeitgeist വഴി പ്രാപ്തമാക്കിയിരിക്കുന്നു" #~ msgid "Click today to return to today" #~ msgstr "ഇന്നു-ലേക്ക് തിരിച്ചു വരാന്‍ ഇന്നു-ല്‍ അമര്‍ത്തുക" #, python-format #~ msgid "%s to today" #~ msgstr "ഇന്നിലേക്ക്‌ %s" #~ msgid "Time" #~ msgstr "സമയം" #~ msgid "Actor" #~ msgstr "അഭിനേതാവ്" #~ msgid "Manifestation" #~ msgstr "സാക്ഷാത്കരണം" #~ msgid "Left click for a detailed timeline view" #~ msgstr "വിശദമായ ഒരു കാലനില കാണുവാനായി ഇടതു-ക്ലിക്ക് ചെയ്യുക" #~ msgid "Right click for a thumbnail view" #~ msgstr "ഒരു നഖചിത്ര വീക്ഷണത്തിനായി വലതു-ക്ലിക്ക് ചെയ്യുക" #~ msgid "Click to return to multiday view" #~ msgstr "ബഹുദിവസ കാഴ്ചയിലേക്ക് തിരിച്ചു വരാന്‍ അമര്‍ത്തുക" #~ msgid "Related Items" #~ msgstr "ബന്ധപ്പെട്ട ഇനങ്ങള്‍" #~ msgid "Subject Interpretation" #~ msgstr "വിഷയ വ്യാഖ്യാനം" #~ msgid "Interpretation" #~ msgstr "വ്യാഖ്യാനം" #~ msgid "Pinned items" #~ msgstr "കൂട്ടിവച്ചിരിക്കുന്ന ഇനങ്ങള്‍" #~ msgid "Pin to Today" #~ msgstr "ഇന്നു-ലേക്ക് പിന്‍ ചെയ്യുക" gnome-activity-journal-0.8.0/po/cs.po0000644000175000017500000002577411610336456017057 0ustar rainctrainct# Czech translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2011-04-18 15:44+0000\n" "Last-Translator: Konki \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2011-04-19 05:18+0000\n" "X-Generator: Launchpad (build 12758)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "vytisknout dodatečné ladící informace" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "CHYBA" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "Nelze se připojit k Zeitgeist:" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "Dnes" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "Včera" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "Piště zde pro vyhledávání..." #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "Odstranit špendlík" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "Odstranit položku z deníku" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "Více informací" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "Odeslat..." #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "%s do %s" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "Deník aktivit" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "s" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "položka" msgstr[1] "položky" msgstr[2] "položek" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "Práce s videem" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "Práce s videi" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "Práce se zvukem" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "Práce s obrázkem" #: ../src/config.py:240 msgid "Worked with Images" msgstr "Práce s obrázky" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "Úprava či přečtení dokumentu" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "Úprava či čtení dokumentů" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "Úprava či čtení kódu" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "Email" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "Jiná aktivita" #: ../src/config.py:247 msgid "Other Activities" msgstr "Jiné aktivity" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "Video" #: ../src/common.py:145 msgid "Music" msgstr "Hudba" #: ../src/common.py:146 msgid "Document" msgstr "Dokument" #: ../src/common.py:147 msgid "Image" msgstr "Obrázek" #: ../src/common.py:148 msgid "Source Code" msgstr "Zdrojový kód" #: ../src/common.py:149 msgid "Unknown" msgstr "Neznámé" #: ../src/common.py:150 msgid "IM Message" msgstr "IM zpráva" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "Ráno" #: ../src/common.py:936 msgid "Afternoon" msgstr "Odpoledne" #: ../src/common.py:936 msgid "Evening" msgstr "Večer" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" "Objevte chronologický záznam vašich aktivit s jednoduchým hledáním souborů, " "kontaktů, a dalšími skvělými funkcemi!" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "Dostupnost" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "Povolit náhledy jako ikonky" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "Množství viditelných dnů" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" "Nastavená výška hlavního okna v pixelech (požaduje restart). Nemůže být " "větší než je velikost plochy." #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" "Nastavená šířka hlavního okna v pixelech (požaduje restart). Nemůže být " "větší než je velikost plochy." #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "Množství dní zobrazovaných najednou." #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "Některé speciální možnosti přístupu (požaduje restart)." #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" "Povoloje malé náhledy vedle aktivity (požaduje restart). Pokud je vypnuto, " "zobrazují se pouze generické mime-type ikony." #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "Výška okna" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "Šířka okna" #~ msgid "Search..." #~ msgstr "Vyhledat..." #~ msgid "Look into the future" #~ msgstr "Podívat se do budoucnosti" #~ msgid "Go back in time" #~ msgstr "Jít zpět v čase" #~ msgid "Look into the Future" #~ msgstr "Podívat se do budoucnosti" #~ msgid "Jump to Today" #~ msgstr "Skočit na dnešek" #~ msgid "Go Back in Time" #~ msgstr "Jít zpět v čase" #~ msgid "Journal" #~ msgstr "Deník" #~ msgid "Pinned items" #~ msgstr "Přišpendlené položky" #~ msgid "Click today to return to today" #~ msgstr "Klikněte dnes pro návrat k dnešku" #~ msgid "Pin to Today" #~ msgstr "Přišpendlit k dnešku" #~ msgid "Powered by Zeitgeist" #~ msgstr "Spuštěno pomocí Zeitgest" #, python-format #~ msgid "%s to today" #~ msgstr "%s do dnes" #~ msgid "Right click for a thumbnail view" #~ msgstr "Klikněte pravým tlačítkem myši pro zobrazení s náhledy" #~ msgid "Left click for a detailed timeline view" #~ msgstr "Klikněte levým tlačítkem myši pro zobrazení na časové ose" #~ msgid "Click to return multiday view" #~ msgstr "Klikněte pro návrat na zobrazení \"multiday\"" #~ msgid "Most used with..." #~ msgstr "Často používáno s..." gnome-activity-journal-0.8.0/po/he.po0000644000175000017500000002116711610336456017036 0ustar rainctrainct# Hebrew translation for gnome-activity-journal # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the gnome-activity-journal package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: gnome-activity-journal\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-26 18:05+0100\n" "PO-Revision-Date: 2010-07-05 05:44+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2011-01-27 04:52+0000\n" "X-Generator: Launchpad (build 12177)\n" #: ../gnome-activity-journal:85 msgid "print additional debugging information" msgstr "" #: ../gnome-activity-journal:92 msgid "ERROR" msgstr "" #: ../gnome-activity-journal:92 msgid "Unable to connect to Zeitgeist:" msgstr "" #: ../src/supporting_widgets.py:83 ../src/main.py:304 msgid "Today" msgstr "" #: ../src/supporting_widgets.py:86 ../src/main.py:307 msgid "Yesterday" msgstr "" #: ../src/supporting_widgets.py:186 msgid "Go to Today" msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the previous day " msgstr "" #: ../src/supporting_widgets.py:188 msgid "Go to the next day" msgstr "" #: ../src/supporting_widgets.py:520 msgid "Type here to search..." msgstr "" #: ../src/supporting_widgets.py:706 msgid "Playing..." msgstr "" #: ../src/supporting_widgets.py:820 ../src/supporting_widgets.py:830 #: ../src/supporting_widgets.py:1421 msgid "Preferences" msgstr "" #: ../src/supporting_widgets.py:829 msgid "About" msgstr "" #: ../src/supporting_widgets.py:912 ../src/activity_widgets.py:551 msgid "Remove Pin" msgstr "" #: ../src/supporting_widgets.py:913 ../src/supporting_widgets.py:1287 msgid "Add Pin" msgstr "" #: ../src/supporting_widgets.py:914 msgid "Delete item from Journal" msgstr "" #: ../src/supporting_widgets.py:915 msgid "Delete all events with this URI" msgstr "" #: ../src/supporting_widgets.py:916 ../src/supporting_widgets.py:1355 msgid "More Information" msgstr "" #: ../src/supporting_widgets.py:928 msgid "Send To..." msgstr "" #: ../src/supporting_widgets.py:1198 msgid "Used With" msgstr "" #: ../src/supporting_widgets.py:1282 msgid "Launch this subject" msgstr "" #: ../src/supporting_widgets.py:1284 msgid "Delete this subject" msgstr "" #: ../src/supporting_widgets.py:1431 msgid "Active Plugins:" msgstr "" #: ../src/supporting_widgets.py:1439 msgid "Plugins" msgstr "" #: ../src/supporting_widgets.py:1444 msgid "Show icon in system tray" msgstr "" #: ../src/supporting_widgets.py:1451 msgid "Configuration" msgstr "" #: ../src/main.py:143 msgid "Loading Journal..." msgstr "" #: ../src/main.py:318 #, python-format msgid "%s to %s" msgstr "" #: ../src/main.py:318 ../extra/gnome-activity-journal.desktop.in.h:1 msgid "Activity Journal" msgstr "" #: ../src/content_objects.py:567 ../src/content_objects.py:569 msgid "{source._desc_sing} with {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:568 msgid "" "{source._desc_sing} with {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:579 msgid "Available" msgstr "" #: ../src/content_objects.py:580 msgid "Offline" msgstr "" #: ../src/content_objects.py:581 msgid "Away" msgstr "" #: ../src/content_objects.py:582 msgid "Busy" msgstr "" #: ../src/content_objects.py:614 ../src/content_objects.py:619 #: ../src/content_objects.py:624 msgid "with" msgstr "" #: ../src/content_objects.py:663 msgid "Time Tracker" msgstr "" #: ../src/content_objects.py:737 ../src/content_objects.py:739 msgid "{source._desc_sing} from {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:738 msgid "" "{source._desc_sing} from {event.subjects[0].text}\n" "{event.subjects[0].uri}" msgstr "" #: ../src/content_objects.py:742 #, python-format msgid " (%s Attachments)" msgstr "" #: ../src/content_objects.py:766 msgid "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:767 ../src/content_objects.py:768 msgid "" "Note\n" "{event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:786 msgid "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/content_objects.py:787 ../src/content_objects.py:788 msgid "" "GTG\n" "{source._desc_sing} {event.subjects[0].text}" msgstr "" #: ../src/histogram.py:438 msgid "item" msgid_plural "items" msgstr[0] "" msgstr[1] "" #. TODO: Move this into Zeitgeist's library, implemented properly #: ../src/config.py:238 msgid "Worked with a Video" msgstr "" #: ../src/config.py:238 msgid "Worked with Videos" msgstr "" #: ../src/config.py:239 msgid "Worked with Audio" msgstr "" #: ../src/config.py:240 msgid "Worked with an Image" msgstr "" #: ../src/config.py:240 msgid "Worked with Images" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Document" msgstr "" #: ../src/config.py:241 msgid "Edited or Read Documents" msgstr "" #: ../src/config.py:242 msgid "Edited or Read Code" msgstr "" #: ../src/config.py:243 msgid "Conversation" msgstr "" #: ../src/config.py:243 msgid "Conversations" msgstr "" #: ../src/config.py:244 msgid "Visited Website" msgstr "" #: ../src/config.py:244 msgid "Visited Websites" msgstr "" #: ../src/config.py:245 ../src/common.py:151 msgid "Email" msgstr "" #: ../src/config.py:245 msgid "Emails" msgstr "" #: ../src/config.py:246 msgid "Todo" msgstr "" #: ../src/config.py:246 msgid "Todos" msgstr "" #: ../src/config.py:247 msgid "Other Activity" msgstr "" #: ../src/config.py:247 msgid "Other Activities" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Note" msgstr "" #: ../src/config.py:248 msgid "Edited or Read Notes" msgstr "" #: ../src/config.py:249 msgid "Software Development" msgstr "" #: ../src/config.py:249 msgid "Software Developments" msgstr "" #: ../src/Indicator.py:87 msgid "Hide/Show GAJ" msgstr "" #: ../src/common.py:144 msgid "Video" msgstr "" #: ../src/common.py:145 msgid "Music" msgstr "" #: ../src/common.py:146 msgid "Document" msgstr "" #: ../src/common.py:147 msgid "Image" msgstr "" #: ../src/common.py:148 msgid "Source Code" msgstr "" #: ../src/common.py:149 msgid "Unknown" msgstr "" #: ../src/common.py:150 msgid "IM Message" msgstr "" #. TODO: In a future, I'd be cool to make the day partitions configurable. #. This includes redefining what Morning/Afternoon/etc. are, but also #. changing the categories entirely (eg. "Work", "Lunch time", etc.). #. For this get_day_parts and other methods should take a timestamp of #. the relevant day so they can account for weekends not having "Work", etc. #: ../src/common.py:936 msgid "Morning" msgstr "" #: ../src/common.py:936 msgid "Afternoon" msgstr "" #: ../src/common.py:936 msgid "Evening" msgstr "" #: ../src/activity_widgets.py:116 msgid "Switch to MultiView" msgstr "" #: ../src/activity_widgets.py:627 msgid "Name: " msgstr "" #: ../src/activity_widgets.py:631 #, python-format msgid "" "\n" "MIME Type: %s (%s)" msgstr "" #: ../src/activity_widgets.py:689 msgid "Switch to ThumbView" msgstr "" #: ../src/activity_widgets.py:1050 msgid "Switch to TimelineView" msgstr "" #: ../src/activity_widgets.py:1395 msgid "Pinned Items" msgstr "" #: ../extra/gnome-activity-journal.desktop.in.h:2 msgid "" "Browse a chronological log of your activities and easily find files, " "contacts, etc." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:1 msgid "Accessibility" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:2 msgid "Allow thumbnails as icons" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:3 msgid "Amount of visible days" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:4 msgid "" "Customized height for the main window, in pixels (requires restart). Can't " "be bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:5 msgid "" "Customized width for the main window, in pixels (requires restart). Can't be " "bigger than the desktop's size." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:6 msgid "The amount of days to show at once." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:7 msgid "" "Whether special accessibility options should be enabled (requires restart)." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:8 msgid "" "Whether to allow showing little thumbnails next to each activity (requires " "restart). If False, only generic mime-type icons will be used." msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:9 msgid "Window height" msgstr "" #: ../extra/gnome-activity-journal.schemas.in.h:10 msgid "Window width" msgstr "" gnome-activity-journal-0.8.0/PKG-INFO0000644000175000017500000000140011610346154016541 0ustar rainctrainctMetadata-Version: 1.0 Name: gnome-activity-journal Version: 0.8.0 Summary: GUI to browse and search your Zeitgeist activities Home-page: https://launchpad.net/gnome-activity-journal Author: GNOME Activity Journal Developers Author-email: zeitgeist@lists.launchpad.net License: GPLv3+ Description: GNOME Activity Journal is a tool for easily browsing and finding files on your computer. It shows a chronological journal of all file activity and supports full-text search through Tracker. Platform: GNU/Linux Classifier: License :: OSI-Approved :: GNU General Public License (GPL) Classifier: Intended Audience :: End Users/Desktop Classifier: Development Status :: 3 - Alpha Classifier: Programming Language :: Python Classifier: Environment :: X11 Applications :: GTK gnome-activity-journal-0.8.0/data/0000755000175000017500000000000011610346154016362 5ustar rainctrainctgnome-activity-journal-0.8.0/data/multiview_icon.png0000644000175000017500000000175611404711063022132 0ustar rainctrainctPNG  IHDRw=sRGBbKGD pHYsIIEtIME .mTGnIDATHUKoUΝ+y4'JV&-O%UXUb B  XJuQQU%$Fi"vq^{&FCx@'Nm-VN"-vCf{شrFRɮAVr}Tr e3* ת]uG+ax a) AA"53YfYsShf( /qvVlUć`4' _i8^!5OmHx'9A* 4$lC yuKjI8DkF^a 6$BQXu4C jIͻI؞?۫Q`vv+vM 0@ԶØԌkn "U_G5:;|F2CVqXrĽ]|qE ֍|}tBb_W ^<ϋB5,\@LSV7.'I}#Ь r3ww $`XkU_ L.JQQѵWy< =5@4ryk޶Jt3Lc\` L#+XxT$Ş| (iٮ[`]=;>9IENDB`gnome-activity-journal-0.8.0/data/timelineview_icon.png0000644000175000017500000000255211404711063022601 0ustar rainctrainctPNG  IHDRw=sRGBbKGD pHYsIIEtIME  ?KAIDATHǵT[lTU];ΫӖRLi)$ E4!?~$!~-%H@*NJәi;s~ mZbt%'Y{gux"Tn܋'Eƽ h ǻ@ (HT9tО0phY=Mk7mRJ@t@yƇGWPuS-6{[ͪLy"R󗭦889͋l{'[z iQVGlkںZD; #`I⠴$OP\Tb">aCJ3gHix(sST Mk%% MsP EQ(E 0t 1Swo mHuz]tiо}k;VL&3H]/T|C?BK=9uͻE(f@ 0s"RH":0S4*fA._sߖ(h|23{p%;vV?N܎ñ%K<epy%d'@ $Cr ېMpHyy  xL2S. `! =p-MzB46qgڋlr.ض*AQrJYgAٻZ'ڡĒo&'v ɹp?sij@SU43΋'n(~գ)JrQV6a;^z9 F7oQHGe`/;@'QoWn_eC}x)dJ&'~h;ZxES׽R]GΥd ôaZ6LÂ͢heEMoTԮFJ7a F~l||g{ϗ5'_s0,Ĝu3C ð1,d2RǶQ`4r0u 3)*(*,@jV5- rDayl˲aYB׵?grdܩmܚ߆t$q;:0 ZC ") RRJBd)&>֐]P]\x<ǹq_O.4cXU#JK$LEIMUF\CEPE(Mzbݬ8ωUg~rǾdo(ٖJIc_}ij=]g~kp֮8M g_-1VLӸgh15-f6cJFu76ASt|ʭU0V>B@$#y'd58_QR$c,PXRh#ڈ( B#D-(TT 7#{}8lK,eݹ9#rPYևmL\w>F=3;yU}'ojoi,X][vm3?2tGEOZmKCqS,:rD†P"68dY :˳6bHIS2z`g}.蹻>7vp3+׋FsgyA`Pޙ+?ݷ̡ѣ_Z F4Fo-\kk\#gmZDjMMh@ "M `ŪJ#P %T)X zsP!" <m̦Q^=M )a!sQ):SBǨX!-$Ld!yњMTluDlmBDMlv%D=PJe{xSp yN^sPܾ1?Ϟ/zQf'.\Xt4| 0̜1:Go{W[X^O$M[(a[?/v15uֲ&>\_罩djAapwm};~U|2?UVt*JSɫق3uU}]e~"cs^~˹תJtuEi{PwY7o\z/7:VIENDB`gnome-activity-journal-0.8.0/data/icons/0000755000175000017500000000000011610346154017475 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/0000755000175000017500000000000011610346154021134 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/24x24/0000755000175000017500000000000011610346154021717 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/24x24/apps/0000755000175000017500000000000011610346154022662 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/24x24/apps/gnome-activity-journal.png0000644000175000017500000000245011404711063027774 0ustar rainctrainctPNG  IHDRw=bKGD pHYs vpAgxL,IDATHǵ]UU{3w;_::A&bB6[Ac>eT }@ICi(AXZJ8wƙ眽Z=3;V`I6|~m8z}^( [v)KKn|yiiMw&7n/`(F*A'2U*H*^48uckW+gc1@Ul=;9p]1QCԏ- `5d 4$h!ɟN~ 7n< .Kں PcƘD`,1Vg|50a1*RLjA)^HWh^;Mژ h@50lCe< JшLjIqx玂*#`@<+n4h01@x0 c"idĵx[·(UƉ~F#0c{oU!tߩ8:K?u MҸx0mfG* V"4hHGաIl&@EfnT}76!F]RFA=*%~S}p(%o˂^@Ð0ڇxGa@c4kAΞ9g!㵀cѐu V(j''KZy}BbߟØ\F ]9@ -ksG!8RԀIdz6M0su>QA`4*6*BWu 22\|oԈjАY *d=ǀ] WnWͳFƃ46ĵh!!]S'O!EB11ăF}op?n8_g gdiF%dilm,-2~.Z0(9!n;34,\]Ma6k.W1&?^|y a P_\4yN|P[3oO_b5{PsW޼3eǿ^_/ϴ=oMS}X>*1֯&%wI\I:nk a!fL%tEXtdate:create2010-05-22T19:48:13-04:00 p%tEXtdate:modify2010-05-22T19:48:13-04:00{itEXtSoftwarewww.inkscape.org<IENDB`gnome-activity-journal-0.8.0/data/icons/hicolor/24x24/status/0000755000175000017500000000000011610346154023242 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/24x24/status/note.png0000644000175000017500000000212711565730047024726 0ustar rainctrainctPNG  IHDRw=sRGBbKGD pHYsppuhu&tIME rIDATHǥ]LU,,.@-1jC-h!X$"Eb}jVT&5mEjҘ&~<11|XJUAV Bi.aX؅`Lߜϙ5{@ `6ȁW^5'jZ]: 蕮7G_~毪>N80 @05;1LLcj:DLٔh{ǵU|S*ba' XDǼ^222ؼ)'!b՟ǜeGsS)ZBDBj~M3>n(.|q&L"=%Uِ:c!@~ni[S?S8srOy;I bEQrFk -bv̽4nwus/tH6HK" MyH8&QM t#`$X0cn6DKJ2\I3/6z.qpU-Ǵ u5^Z}`jlq_皏nO?gz:DfEe\\z<bq u}zCMo7{a@hs3p[Q\р#1u1PPP%ו9l+.cGAzJ*~ 5]H\Lc= (X3]sj7=n(_1b)91֬nwur% 5]] kZk-"gsO5 "7ݰ{- PRw(C$0Mv ?syx%?[1u;.f\ ]*X(E456 =V1`wS}ݜ1? !;;w>_~nߺTק^w ?svwXUDD +y/mFXbG͏u}읷%.Iu+|7R~ڈl(ilέFȅV啕2uLνw|4%"񙆆0|Vir`FӒ翭I,D/>ir`m.?Ǐ^XBiʩ))d+dfgU9w84<<)H@&{1;K---z,V]EtW:y6tUH[Ow1F"50_~I:Ks=yȺ:gk5|?[{?~Oܼu~慗NW7vz|>[_{o/ߪ/1a0`n>=Gx&N@ ٗAn ^SP,w9[=H47̑i|gp̬?WE@!j if@f&{fi1,kGjMZeȚ-,=D].{Wnݼnܸ>]|7泸q9n|W_7 >E 0Ej#lẂ >ELRr0Tt j}`fǙHpҖЖ:j4sFKew(2s#D=fqkܝJc"bXܑǬ55.2ދWo{q 7M@FGd"m{}5`sNdF?;#811gw X"#9>D {NȨ pGuxo__~6C|mk[n)Hphrusd-Z1|= (q b$ѯM7HG 9k@!i& tZ^;Z EAFGoxDM .@ɚBh4˫|s#ĐZa m=:"赖}2M m{ؐ 䢏D=/<{=ٷۿ6 y6MN2J:Z{{Dڊ%B XR%F2)i#$}xo61Ɣhn 1]0oI"4~>_@5OKcKLbu8Lט`]F%ZK͹Q }bo ]f+PX"VZ*k3&.EiKܺ}-yEځ@EM)<Q$69QJK>Dd&$4Ҫ(,h㎜/28$"a^86 LT}i2#0 gAC"@ (13 ((k#%268i-MH& knn$4O y1mK_ QIa71{q68޹ (ͫ%RE$9XbD6 Oߛޟzیfi냞aē@1F!M/ CR~"fH# w3i۔aAI[" "wJ* N ,y3mC,{TŦy,PR[ZҬl%Ð ,*%v>ERh%|!h,JzUfbڿpQ9eC|ړߏ-c0kGB.$ި&xi=`i|1N0ғgHA/z}v*H;HBjS@*VH 5!AE+-pIJת;3L%č(kI9M&ecIg˵O$:T KH]\lIϥySBٽt腼71ҁHLrP!r  <1wv%(:\'oOoz 6v7$}(&ía &CJY m9a|6(I]H0'VHi(b\ie`Kdͳ:aUIbŘeLDaj8"WJK\8̛ Aٌm{JBmNA~Lq<{4lSlw9,Y'EfZc2}exmCJ^nBN~mFyF6YFK+> R AZks6Tob.pCO+{M i<pZUh>t !s.! {3sA'ih7'̊镲I)<: 1wU8Ԓ)h1Ba%B6X򵯅aP?ufΘU۽s/O<1I7:+~X4Qdb~裠qoP7!c^v42`Pl!ovؤ+Z%!Xh2mU8[vu:|XsA2Mk>ǔ3Z RRQ5jl^ΚXlAl,%4шեfN_@;Rcf-YW7,h%R6&F@ -{3s.=-ޞF3NA;v zJbnIJ lA@"h"Z(i$F#0QNQbr0||l3`Ζ>W,hMǘpī `.8!idHDF)3nԲfL8SE4rh=2|@^M0.(dnXئ ّn):DAl '+:[l0c(h=uRsyKnY9E@EWi0_>چ-Qa9'mqN[FCfe:qlhLWrs @cS@JĔzR@?!о>؈Q׎ 5gAvdr=O7/6ijAۀ}pfNb [cIpxe{,3"lv-ǝ}MFJݒ'b7y6PCgils~t[.l%]?OܲH̶:غɻ =Thx!oN-6 ~k[R 'v Q,'DbUA(MmLSr/񙒦ll6PΒx: zx˃XDv/8Kg-of®&-{M hYȢFe\lYZqa z{Z#.٫zf-h[JsA`)o/&Uʏ5 L|=FǰÃ΁՗14 7#04[!%C4oF^0 =B #{T?aZө401kz(&*d0<,yI$!"D}o!y]F38_6fռ_}%K:jQVҰ9:VJ:  v]80 + \6HzOfg BCv[QG+NTDMx|c0zUYŏftVI,[*C5-H5 na@s; ϝN'Gx 5̚e L ƺa:.`8ֳpRep/ά xV5/}Ogޝ\n`lc ͆55Q^(`9=)I]q!XmͲ.2D[^UUG3̈́E^++f4QJc. kin(DL>Cڬ=k0df 6Xi(oEbnŤiQƱ*jOp~!mQ]%(uŀ_TQZ3QVA{ l&qz\Ohfㅧ+ *s۴c+#CbΜU !JrdZU$@3S '͵U17ƩSQ'HRȕN[" 0mUIlQřgnz\ֻ0YU(8YnO§* Rcga `Gk@l&7#1`X7d#Ww + UxF{Dw4xJa,5I%~6gL\DZ*XyUz+u& !CK :x{Upp-Aj9"k0}0H\ؔƮgli~%hi-d6yaΘH[L]x RNS\'yh5?WޘpOF|5ac<ӊI;t@xKHaZunPl N `a\2%:u9E[-PVxXE k<ڞl72ѩz[ QmD3뜈B AW3GJrFDi{8# ,/deďÄ́2}R[b!cB Ri,jCn))e2>X5n4&u8~w '.t+cܗtLfalq ™.쬍)`IyS;-C&S `s9N1o^2 U Lr ol(rim5.&K܏-fb")1Lk\.EU,C3ɝ㠽?ښ t@ahzM'Y)n^zu:׵wժoD&`-d'fq~Xe<PTrZ d Fʅ 3VZCrBs#S nGQn1>:*4N1#X m8?mSBE54KRM\SRVi Ш+&ł18l}'RZ3܌õfnU5ήZ .&C\7UZ|]M|5rITcJ0"WF'Vo>{x!Oh?gb\/;KWb'=4zѰ%KײV}a"¥i(}#"ݸW\IMb-(0.]fdT9R A(=΄-a Ʒ'(3ĀAr5Ԫy8ZMڬ:UDv՟ѝY!QRkcy5GvkGq2\-@@k2ȫpUDq8fU50#p>\W&킌Y"hMڼ`󷝓(Z--=APPj dp 47*#څk+:"qouC q(e6*ٵ]%V~"r%mؼҊPP%f"Ϥ5X}&sz0Py:x眴=ksf1Nu(q4d6ډQe E7Ja('iG531Mj@Q~țz4%z [=:h9n=zGi挐4DAxzMw4iퟒWc̸f0!gfVKXbh% W무́!/vS+C2Qz@my&e9)[ A[&"W<לsh֠nMm\PZTP*)`--c*Aճ$櫫n&I [DYE̟@xV֫!8Pn!ПWE]'GSvl6V$%-|<'Zk8*dU}`m c\ǷV6n"| ZRbK > $lu L-hÛjsh;)bE[RPlPǢuB%zIecEz4 z˹ ҧ=N-F?ėflAOI[B$ةRJrod).Ҫ# ߛ^+#Wl}M@b*D "KvQU$U3i"um- l vQ5b*(&w#Scb!^#!)[\rz`-\NG;mïNe3e$p:DZ"J}wlXEc +y !·Ҫ:ټh26וA] Ek\=Qz  jݓ9T-T5F5b`?K1,eO&b6cBFv$҃uٳO:=FPqjlLf0{=Kr8>$.! c)X~LH}0>%i1NCH |!2DԼ'y`*: YQԯ<k|q138JXԙt3K>lPۘ|X/-&_'CeX9}8NS~lJ'a1Jpm*qu<3U?x۵y']N_K|K,]GJV%G=B=9V)ő_Kׄ6$~SK{l=~(OʆcTA6PW!#XiE*1w/Ō7H0^Khf,ц"cPR@,WC@żL`ynj '($lH&t# jX* ߬\oVvq+-FҹCmgi%NTaxUquߐZ4rjKH{/SAm%au93pT~ozlFK෯nqN (Y Q,r_5`j@ ­;HB89hȳ4f"+lG-&+Yi{cy>. N 'T`4u0hFLֺr|9Wa3S,7KzL6$AIiOоlLR̀6?|4i9]p;:YRq*Tt3$DxyOU6kT,bQkcUAʦT PDө* Ҧ%>:uYY ;P+ʶI9=XPJu^%Ձ]Ԍ5Zv(LuΘP3l,A̲" tu kf'!*x-u쾛m` mqE n߃#zlF3G=hE6J? :Br5D>)=JHZ$N*mHϬjز5hZ(@pG]gyl&l&8oᤃ@. [Vp78="TYdP\NR=>a'V-g=MCuct&^fCwQm/s:X_+N@xVVDW^,IFJ)f?kțUDW:7$UK1ˮ3MK(H 0Aw&PTڅ.mūW̖0JjiqɴvIkU;:k,}NAT8xRAϊQbX[=[YpAv3 UZop>&h6fQuwBMal҈BS "1qrӓhdtn#P(]%08ՙ7D}YjohjM` qF:&Af y09xV]\\ڔo6Ru+2y=q¼JF$Ju:B rP jsAVEt7eS5$lT2<Фv Ѥv+Q#Zs`hh%-L 4ES}0q#hOHQkچ>@ĪK2Qif]om،$ 8Kk: DHSGk_U6`T8΋i9vP nc[@̚++C[XݞurK K+ADBfhә{';=#s4m (sqfK\jQ}@!)(9B* JdX ܈H [B9+YᒪɄԳ-bɵNts7l="̎3sSWb1r Q nBbP d̃ew\9t.!D撇05 +H}d }\1' |fJie+ H VHmmhOS۟>/q=6yI&;ϤBsŚ[i5Q$2'0.&eu@J!r+ ǨfZ'p}c Ȇ<8H8A@, 5{5@GIqQAPx^ @sj>PB—fP#5R^`[ܨDq10`f;]*~̨\ |;4igfy$BxR ;o t(Yp`O,~Tvk 坳W9;IkԆ:w7S]BiW05h"ҮSPVP CMd9j-pyz.Fii"ESۈYHIם Tv.:,3UnMIJ4em-:L9q/n])QYYp0Um'|V8pl\#u|\#┨>wD"쉴cD%7ʳM.X`TPI'뭔w` yfy0:gCDn]z朘*,& z8Un3#8

E'AdsȽ/>w'ؿOr]@GKc-E7‡c2HOdL|zbJcԵzTs;tGȀXAG$c;K%HH4hGgh sWg(gm.@Wu;gC3ܜyƭp:+_Ń׿1+qNۑ"GSl!gR$C #[W"zGyY0I|]S?/>{Пx7+hAnjOz^J4cLDb6n9EV ҴaN(bvL;+92M1L[^*ůִokt-}պdgh}gS 4ec/dwyx^g)bKѫ 3\e<,_>_ޗp ,{И^/NJ\|poI;9_N8?UogYOc|}/?0bH<$T3Jbf['/\YMٰTkҌFQU5hU_a T&U2sZkܸ:Z ډWjyS7N[m(FZl[+ fݾS֌>y=g 2o}W^?_ȼd[x?qzx7<7GW7& pGӽ/rf7oykEԅpNy^n>o uNA1Nxw6k?2n- '57_]|?/ܻ7_y -TD?djQ[m%x uZH;|_ZG2^^jҧҳÝɽN%| \65C&#-կ+]Kɬ=!2Ş.Y`$Q&Dl: I QGI,E_P`ng(߳{hJtEx|zLHͭbfx0q^?{g Nݒ{~q߁s?;=W  ~xoxoW~ s?93nߪm`^@\f+up"-Y%,H<{c~cג/ylNqƙ5iIBF FP]¿~y i>C:ͽ Xl$5\bX IDATt,ID(Vj t4K_m݈fEҘ4o~u:ŌiCuU#"Kt_ ~a"&vjFƘErUö%1Ck_CN(PYB2c.:\:ӿ5Fdz$K =?tՀoƆpM(wzZf5cEe.x`@nOTI0k$ ML5!\pz.J ||xưXMqy</#w> ~W[BS~8=)_K|?=녛}cfLfm+FK{6zLtatcdr}Zx-"̋ֆ>{U)8v֕ڮ% El5w$@2cQn (s{9 2XC(Ji^V$ؤf3i Xڡd AM"S5s|7!%]I.H%=l.Y$ M \=ޛx.^Eh}ϼ7 0~ e<@7O"`+ 8n <88A gZOrmtUm9Ч)6s9jm 5L3@N<Ļ&R`n-E[V3 d*/,/MH+EWѥݗ^n6s>@x-fC^TzPޤcRc5qo!/A|wθNA1C9ь(&& ^v 5mp|sx' pz+6P2ݯ|+s//^Jˆ^wAyUhP* 3XHZ>]%Sh} MUoZ`MqB\{/HnY[g-Q1&.O[rKQQ*9y\+'CZk\s9ϥQ)-"{ CUyg٨0{@Ò2kjIedV:qN/5" k%,k_ߋpͯt ]Nkf5`VZd<^A2_[+mp1!-Jcw3Pmīk}d2#\-)\[Չ.G@Mw1OkKH@PIC!XaIG}70M͘KJ3jW|TWزGQ/f+LhXK*بqw" ,]Eքާ>%u@|MU-0e dZN<8&^x%w|՘q֗x_\[욐yq1_|o!}ȉ;qJ6i#a"d̂F3h P]b}\ď]'/'Ȍf@u,%1wʋE(! -[oZ:PF.X,N.ngz?*S 8Pҝ6c3p̣BN'ڟz7XK.ZNh7filM^ŵp1 V$46ތڸj?y{Қ*tⴝ}7;1ĝ3;?3Ë^Ư๸qW/N!fWo }y2_Ǐ~yux*"pr$冉WU 3!YcVF^8#vڳa{2ǰ\%܀15:ndX-z/mınVɕ/5?6‚%3@n6ĩNEFy)6@oN.PnV501,STV5w`v P Ki\S|xp>m݂XɽؖQj7?+ߍwcxp[KypBՓ]S:8#ݽmg^y7$QFIBB4fƐ#XOV 6wN!#]}hl EY2ь` B 0T}:#f"E *Yb\*:et21=g'ʹ |l#(S\Vliy7ol҄K.zwMPet)+삀*w2Shmm&xJgU<s:N~ yg9FV ~5Ns/;~HͻKMx<~^»^gmÜd% '^VFSBb* -M65ZK G]ΐ/0%.Ђ`[,'\".j X'H*tV&$vmY r[kUBև]c`Nم.ۄnEZGѰ>`Oگι2I8yu$TS Ʒ~qP<;Sˑ|3oQ|׿'n>sg3gq|ƷW _o xU0_@XBNG9MeTh,j= Y3ir?t~>9Dv>A 5DLjE(QPYU0 6UOf90J"EU+U d&0NlaV`JvUڡmJAoö0r"q̗F*5j8\v6Ҩ+WvK~%D>87=2ɳ[(2^|>w|_x w 9n^=>wsKnƵk-vIiȬ VTC@:)I-xGaԌBAgNj[ˮg%OCBt{lg ֦v'=_r'8:.W6BkB=ιUr('݊[%~NYlounxo;07op̍6Fok{zy }<. B-V)E6#3Zf\ԾAHC@oel~SWM$4TW } vޢn/VSU4JM)Hbcy;Serfw%ȳ]24KJ# (}F[E5B5f+@`rU˚ 7].|`R>/qE$p;; kd&q`8J*ړ ^{m~5PItZbz0{b}=r+y`Ѕ$cJutTK#uejy?nKfB-˝ F.f6zVm%4hpm4YJVfp_^g3s«$wCOF{z"܆v* 2'_?gppVtsp\nnߺnNë @"dIRzg+}q:Uv>pu5>Ubc飍5#CXuh|\_XҪYb^IٜQX<2տCmAF" ڈaXQ$7$f6J-L(n R:Jq5pM}~~?;k68kBU7\붝לuڞg ѓ6c\Lt4Ն UU\N0??JCvTߞ5^' Zk}$B^/¶)IL#7dᆫow_W>!Ľ/jYh^A4eۚ@;lHάduĪ6ƀ{k׭m0/ Ռ8hWDܒ0<]Gd4I`_c[V_G\Zh[m&qvg p̡сOL%Zܐ5骠zGe4w7XcRM(/RzI:[H;_m|/R^'yC , 7m[oM{ʆAn{D5[Wxk?|K/fxTskV/"pf\%JnB~V +:Lʀ;9hHl1ŇB 2./YNC cW]w}U-QR '|X+U,{5l.x(E72Ul{UNې,ϸxxg导7~?^(+8^Pdžx:Z֫lڶ , CFFv'IyDox#2Z~jۍz8Cu]" cYuV! '^2{ZPajm )A4%/amJ.; Y06@M>OۄՎ%e"Y(S"Vs$;R#eV)4ě^vP&һSWvcӦ<|◘p>S pdc{6gj$-<7ycޮG QQۡ}2 rb$RB\ Rg_٪pl> aڣ@l3M!e%V լ@ʶ cMBph' @X?,{=7kqՊRQû&wX/ zHIF+ \~h-;t= z+x 6z+7pMeI@"0}=2nQC rah戺a/LXU)i0ҦcW3ЬhzO81Tk 2c! gBKy0ϕj"⊴xČۢ!rdձyH0]t+0Z=ApM> 'G+>1>-Y\;g=2Q/Ȯ9(?pI{zOxmxO ǿmxs=(ݬ"2; y]4*h:#h*pޱυƉN?`pEb;`"=3<|L̚M*a%c#cF+ܵCkϷQni1k D15&R`*gݼ XnOV<|>sngxc0pI1{#DXe0TOO~;p4+C, _oOmZ?(N.oXb-D!nۄ)QIH~dVtR4)^v C j ̡Pྗ,Mz,(*d[]vD%g"!,p5T8:㚛)'#Po*B`e˂u׎^[|azD dSiG_w,.d ǰ=ض;g;w;^Q{~|753V\L6z0F=c.ɟR)$yQP@Py A0XD$H#CWE*k=UB;U ˂6Ip-#璚'80_JI<;9|0<*.CժyGvw8|wnɺ[w~cw3Wp@6{2gjl.ٗ2~Չ]M89`@R0kx4l<: BxEƒx..@߶IMD?5Yl_9Ehsv&#*lc)j#tg@ywi5A\ȭt@T*#@DE *2T4l]чtǂcт,۷oc 8Oa.Eu_F[Lv*A<"H#0zƂzs!»lRr;#;S/NdS1!.r @FgnW 6@JUo%OۖڐJ"sN͂Uh-tqzŐ m$f gBsL Wr 1So0, l%kH 5 .sjF,)|N- Vź3kIo8^ҰEpc#x}|zդd/-7;E-IqPx2ƈraE̦0.P2%0{N6 y.$TR~*`/@dq 1z#Ȝk)`oӻST&ֶA5`] D jާnZm;fJGV;Q/mg9̕tŚ9ྫɧ:2>ݴl*.K)ax°z>7OR IDATir%F_C-5Y/«## /n?,aXڗ1jdz:pxDa(4QdS]`؞\/wҰ,T8/țmFw&4 .MIm 5դOkPji,ׯJ*) T9u $Q= r4w*d=FІ2mWVD=9(B Ԁl5+۷opѸ(u=Jr ,bFT`Q<؞dr0, ''}9GY˂>b9G6b-)mA(/W3. 5=Kג E&Uu\@Hd$FdvWY$D a[>x8c~PfmHBzF{º .휱l![U%J Z>BRQCZz#|0$풌َZ:KuLdOqF4HtPnqT4Fj$sUS/Y@s4ӂW4`VճZ!Ϙ㠘EUe^2ӷy89  rӒR-$(N`4Ѝe/\~4D_'$RM s I#֩ ߘJY/ҡï;ƣe P.g<3  "Z-cc;VhrOSMsde,t\nJ: 1xpA@ ]&42HVK:.2C*`n]PЃmItE }9A3hiU0Qc̚0?cVMuųm59uFSeMNBـ(Y=?UɄ- SH̑b/˒(2a@Ƭ+av-J(G sseJմoZw2| c2Ufp|]QK(%~EO|t$6Јq DzO$aFH>^$@ֹpE)(nD&=) "UyU};u\?֮ڂn/1fH%u}QiIމh' {ƈoInJ=fFI;brJ4"z $#Ғ~Lby$On.W;J={樅uE.;yDb@)c `TPDh>`szj[g Ϝfi i.˂s u?n&S{H |k@Ey9Tm4nma@-CjdS l4`V[?%K|63yUb?;8 m$pbQ]wC+L-<mH鞰Y{Wp!I Z;iQ \d_?P#&DHye^dށ3EXQIϠuw/B' 𴳇{@Ԟb -b"+||`Y'}Mu,ua@@ˆuIŝ484~g]p^Ҋۛ6rR; fN[bzw3FS0і%8Ks5P`W > }%( wc('OE@1;T45$EդfYQGn(ms{ˡDX!][cmjg7>ݳGz{߹uCG/jpd9\'RL<N ǔ) !Q^Yt $^Uӹ. ºc٤=!>Rh0V?sQ{MڊC_036罨Ԛ юU2 )ض >>ㆂ"@ѧkv%걔6Ė.;O`k"2瓛A>8_{z]~x]h? .k'Ӭk!5ǯj´rȨiܥ=d{ 8"SaUh챠^RrTý6tݬYE2V9C{癍WNW( V$(NzF G>״F͜&&fɷ(LHwPaZc6+4[9QBIw ,;h^W2zrb`9L1֖( hɿd&/( p \z4h`g!3GhQ ̔DN>5W!^tsOg 8a ss$3IH!35`h>Z2&HZ֧dn@>2^zsMkN=G^oy0A8 RZȖi2UνfPc>pRP",?d4wkz tԁ{Y _ z$Ax 쏸ݶ1L L d{LឮZkF";Yd"ZVMҙQs, -4zjjo lw{v{lYbq,>Ր\9|aFjaک{<+b@Pꨅy z12,#v`m^f4[oI̓fbIH_ Q1z8H?%)QσCUҝ;cVB:ܫzhHf9=DƩ{Q4 _`kt*}5F+Ƃ fxKJ _z|rN1iUu^w2#I!47сy-iR퐎3 WL*'?Xlf:.F;s9 &]({ dI$d^cxdGBy+z0a3٧j .cN?>48X+wWug}6srEiਜ਼g^gqIܨGAc:5S6h9DPSTcƚȒmD ] 9JԊQlH|q+RF܍qQ4oWf-E8q|><~oWr F{^f(F }le-)`okIu;<&R(@2?a4$0BG ӇgSFq룉e`4U OE %RրC RN~t#z ANI$mam`"z(еO_a0  ? me_9rNAI]$l^f"z:Ժj\"%E@sg R EE1b=f ,YǪ@Bb;\XNܾ5C|r]瘊VU 6 &j.Nz ?8Ȯ"΀3U^U󺜝xOᢥ5jHme$ߗBh_jǒ dn9 ]HQ+rmAH4@ssҳ t`ya'x @)#4Ϲ;kh7?-q4~-"%FcDONs{t:mȐH9iᅄ.m%zc:@ Y~4CsB qvUCc5ϧT}3i {@.ABg޵_A kPdmgpXEڐ26p=0%Խy 1$ -P~՞yQX}%˲52(m?.e{. c7CLpXJvӨ>D]`Y#X-Bk WIO=lwvaӶ9둱qsK|݅Id/ &QZt~)py?:B@nF*i 2׳v5{^_AW(χ(S\^J9o_}*uxsxu)|S{Ym"I/kK[mn;(. V[-CR`i 00PdU[9<к"x>- oT<;fyސL׸JcVf׽oY)L3GwhSs7Gd'|׈ g~ĴqmL*q3nױFfS,,vܰ dD $Hϙ/‡EcdP$dl彄r#7|ߪYvpL7-m< T WGciّb4˖|>)4 B۳@AR2G !l\@[̎84h*zXWӸsϋAmFٱi,\qt ܙa´rX69A%`cQrF<&Sұn: PfᛔƔ.|2yr3$6&YB%D,NOgW"DPFn3aZ}qW!OUc )S_eDS2-lֿSh1[[? B`6Ő:*T Xq#0IkELGdFxԾmK/tMS/V?7ʹJ i3֖lX8 ~o۸u)'mA'w5C쿅͠#R˃LtԐ4jT-Ta^i8>=67GdTm;mBsx=kZ"%(AևϭAakkf%֡NyM12`_sDpY*IHd`TKu龿&i̖&ͳ݂AbrSp['hs3s1ЁG8>4AxFSk6,Sfy\"RUmFmUq ΋!muGwl7RT-ec&of&/xSA<ۗ#t*YQ{%&Kigp&6אּH5\ww 6!upXI,t^d K%̳w#U[9Q~\Cr6mcM}mc$k Hhkq^\0H^526n-Nu)-@-jjV#Rn77N'NoY[sc.sD窩Ikj|&$=XhK3+P=}o7- q)A0{+*)$|Ҽ<"CE %"S&$J:"%{mD_|] )d:d,|$NLN=ҁJ})R(r/,고zͪNJg0찮wJQLX8 >ރ$2D9(|ZK=f2m/+#i1,w-+:쇾utl!D̹P[KOP`qj)#j)ؘ͘KojwaYź\WBFCp~Q?w&SsiQR[ )|6H9Y8I6z, `tm m;ygIDpҴOtOTf=6m8Yjtڍ=$T-', .7$M1 ?kfBsZa 8P^u..M) ˨bO9 X M);%j x膵jʐJH doXI{W_@L0/ ,€ 3_ d4l?$R H`'kSd IDATk,3I/X BE!:.T9Q('D -L 3FLjgRz-mZi̺P@~i Kc=Ec`,U`e)qGQW"kBPvG|Z?r(|L*7 .ôTRgֽЄ'f|P%ׅDQii5Oa{?u [$*+J);sn0'Ͽ R(q"Tcc؞M[fąɀZ)=&ZhfZbmә"6,t(EyG -h _%Cltd?U̓{LJ !",UcB멂'aܶwr4EH"^{XPs-L`QmNbBkVo"@k ?%(bM°.d4U .sKcd$jN-E2ڂ"`]8`D*lcńzNV{Y((Fz#}әc63$ˆr6Y2ej;Ȉ kviw[x0L̲݋ (I /ͬ1fZ iYcӤ-KoJLG"s8t5XN_@O3"g1^Lq^B#@e.d4􅒨HZp堂|#!6u}PZ"+ʜ+^5قu(l w4δLTms0_i-r  ,BJf߾ @c y w+Xճ\C0 ˶X۳1-7P[Wv0Yv}sИ\ 4ef\vkADW#G!0>ׯsm&;Xao4r_,;w1 ^cq1({P k,Jeg(efJ [:8c0gk,A,>OLXI>SvfA9ǩM06԰KGԺ) f1XݓVbfɱ6tnW 0 "<,q&ՎiedWh޳Dg~{ ?|Kbiy>+˜!'&iӸ$nǝmCf K7Xlׄ{BUPU8$ك+\O,MS½blW{ZHYQƧF"T*TnyU y͟ '1ۑtxۚ6lX ޺'nha=t4qe{ e܄7(ltB`Y+c1X%Z_-I1y s@㠃Y*7t%AWpD;|W\ErA 3S>%(%.J"铷1d؂Ѻm,8y]fiR8d#"|UˎY, "@e82a2(Hء=>v1b;Rڀ $sF#ʄLS:E F~}a]xIH8܂ ֖.0Q6}BĉL\ &SVC'lԄ@ĽAKDsG?\JWs.7G94Q.'۳j6=b,]l6M)Ծ0-r.r~OB='8?}3߸9J'1XEY~ܚ0WƼhm¼vv\zf#OfC\:纐FK- о%|ӯj@=%_=5fEe!2LvQt L-#6O6,ZHZcØ˅ǼЦ+1eWϖf00m mSPU nbz(9Ya'(y|v9M'PSLUqRIWUQ'%G_F9¶-9.h=fw@r ]1LkqZFWlº#R-ֱW _!!p jXlF[OMc!)IduE0@Q&I˶ BK?sk瘺2x-2- xL['XJwU@1UŲ,i3ժTD2BZҀ>LN&yXJi!sN Ʌ8T"&ҲS̅zUP8cMG9GQð1|$ʿ p j0R$KB^W5ڞ_b y0D!G#8vIH-w^+Nsԓ'˪3dI,HBbez|jYpemN|rBL,ACmh#EFZJQR紹E;ko!Ln(гkfY 4HS#*8醸`D ,uӬ|WX6T0ܛiEUcֶi;2o]p]h_74lq퉥?1, ЫXI݂ BZez(ye$ lR3AUpdр<[Z1Bԃ*ܚPq ~ /ǎ a Y4GT8to% m9(m}l& HX; "K.w@g`^Je r pqF^|vVTgF ,?,JOz~UL;J_O&;=ጆMFX(9=5!!kl\L #ݵa++|o!{& t]D8C*RA"u;#ʷE0l4,"Տ-Ǹy 8GdRz~0T%" !H6,BLr?z[Hz~22q|B{f@4) zrTƹV"ᱬΖY}a] $ ܑ3Tc,ܒnC bp[߅6գݤZCw$L.]UF\C? D2Hʳ. 9?VIR{umI o6YPo E S 97jA8K~N37CILT<~ {QSbl!.-+񕪼hx8v}94Z*yekILby84jT(1 n:I"xkM@!呪Vuia+DC v@9ɪ MAp1b]Q\f$ fbmr) m9{!_l4+T5Z9%~jBn8 _(䂩+>/ʤOW=<- }9?o]I$;>\{EH' W 2`Ěvyss8E<yn,c(Z呾(PJj<,>N /mFɱRALH`yfdx"Hd}DDd##VG\,C&`ߙ%ej=#îͰвEGlS4"l % ?]|b}pT!;dRhYg E|GqN k &?r > Q_}M$\4N$NXM7emc@ 04M}k!H$лP=x}B3F@qHe lu U iQ|r[8}+xF" S#k:П6AJ7$7c(`$d.#.nL.L1̓D) T0 nt ?[i#ST*(f zߣE/Zn7!R֮ؔGEJ%F"t"~c讁&mR45邚1O[系b7Ykh>#8XQ{[sP̅ \4ňH}PEMD3],d3 BZ%qoSSg/!-u5 !=I8l*!]uܕNa maYґ"\Z# ƐmY3vz; MG5!&X0QX֏QhH%]Xk'ibhY3 zIxd@9R0/w7!k&o%Z{ ᤠؗ+k1b٫p(o§Gi'zO q y9Q(Vl]#Қs2< D#BRm{7uEK[Teg^U (9 fs&o} E,ei[jᇫ0ػ"g&Isۭ::RH#yPJDY (a_s,b_K}d9e,zw"B"e.\j&L޶'oXb< >GY)r7Z10c _ @nc13! %Eeچ.ҜFl&AV^۷"b>χ=P[Q i, #͒pvOw_qoa`"0Y4Hbh/$1?u8e_J60U%% ,C1D/39]"&#S0m>?:eD7չ/i5t;׽-.8dr^0*r}NdJ^2$^eXb #ՍȎ. tQq')3? @FJb!ÜN 9US{(+R `ƌ3=JDɑ2!~'E\U"3!3tq*WJo=7䂤B).!!x^Q2VA]ʊp:PB`O\EA(Cm|)B:6Ԗ%];qj`jDbG7Lţ &Ku hJP5iR$ajOX<)V6gў4cP lS yY`gt$K$pfMAεOf(Rh]<ԩ~V/r8hbΓVYG0BE,%w&fq0 mVԡ^ \Ea}Z`ikHo[IDAT2eAvٛY,e,6$SV/Yp=QZ+,nSõg  Lxs̈́g;d "P -,((tgPk2/1P"~"}_| m#.v:6\"8d=wuOO $.Ӓo?{"F g1G[c ȴwQ K *ɓy'1%"&~DΑ8L ,R}*PTt!ÖB5jFiJhbп 1)G- lo }TpA2CG ÒOaw ?˝vg> 8;{ =ocg)J@!)*3\&xb,{-(҉݆g؉,s>RQJD$D._ 4bT N`4/Rg@ghR/WN!DqT-2C*w.^!,K)Wz&=GxcrIuku1;%tt=㛟C7ƛ;>׽nJH xwy|/=nw|owz O忂7oC[ #YuVO"Rι譛[=]Gˊ7+M_vUUɍ/ਜ਼~dGE[&-k.CǝMyORm7lOIZ*vn.NjGtٿkk.ѧzôaoqr1~"#'߂),SA<"ȿp|rbHX~XyZw9Q11\"e“Ddl!dqxlW\u/uY?7Y6) Q쨻C!h0dxBifSA|={x3mٓ~nxwry]"F\^Zu}|g^G8{ _۶9c2tSC[[Pve/FۛX^"l4{e:Wha_HoF+j_i{nꋱFۇ^Ͻ?ןs? /;~` ^x6=ömWy\?>/b IEbf+;Ĭ t@sE6Z|ɜ;mj[߿rl_Km4) ǿFKFh31shf ѴD Bӽ~N^g z_4}q|q @~ sn9C{il5v[R.]e?f"n"8sm+b ^ڇ{1wBYd/ ʚWdK[<} (5ԴWd 3m9 Өk/CMk/kyzQݻ >qosǸC'/4z%[a]xhrxKk'8s X>ym8:>Oڹ{-&yjx~`Z =쬪=?wpo;yvO^ ^h3z}8Z]d]&k/`{ZW&רV PzETυ]/7^;8{XNwYu'' |p紇f 6څڀGv6ubjI9f̝MS'&б{ 4m{ޗZWv^7Ew|dha{diOhc(l^~{OAv{qb=gWl7VcyBe^FUobT6Z/Fg=_F^WEcTR|ΟFF;` _FϪ|>׫j>zfdVvxm`p0>.n\1^߁uyRy]^wr]Rz-"`Aty>2?yvV=9wG1ptݺm-+ڲ #wpvSdwOH԰onF\4 vNMZ~6NsG^by\/^ {-y\Ωe/qOov|m";wXGI^vclgFR_sPEk&rhh}70>ϥ׃k{_X}; _; Ž+Fw.쾋K7x-cG#/us_ L[8{RZ86bݾvkK_968}algwu=:+_f|w|hý?kx}pl/uYy (fF=Lއ6pR o'o?w>ϟz7|w=V=?}6Sk~'݇AHOh0~Ϯ7y')+Kpz֓-?{ڻmO!"G[_~-xvv ΋;Tpm msڽ@veg+~ٽ"6'&5U󰯳_#i=Zڑ?6^嚧Ͷ!r;ng:;alwhjpIz}?~3o=w;ț@D4_w]}le?OlpMPo`:db 3̄t4c&h A1)dѠ&v$RP#SDf.38``84nc]חZ4Yw<\{~wˆ@G2vt XDAKwfG/f uȪK\tC_UtVcZDDXp$a]X?aYtfKԢک7֥j; ]&P(NLKd-dk(+_ȓ?e?B/'FAtV5xq@72*|i?̗)F%s}fWU3 }>3Ǥ|e~_yg>EPm*)~njbF-m?JX?ޓ=aX pp]غ a%L).ջEKE3e -,ZZ_['婫EP3P]KӑKh_fm]4қTWqi%{|1qa E(Y͖ &&EM,:X@%t+lk7ڳ/,GvWҺ"ا='-S521vLpW+-=y`*O\ LuLLnP~#:+4WZ:< (&&*`Ja4}3&&еRIENDB`gnome-activity-journal-0.8.0/data/icons/hicolor/32x32/0000755000175000017500000000000011610346154021715 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/32x32/apps/0000755000175000017500000000000011610346154022660 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/32x32/apps/gnome-activity-journal.png0000644000175000017500000000322211330612741027771 0ustar rainctrainctPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŗ]dGֽݷk=3Fw̮NV#AH_?C 40̓Eb<( %cȮK܉@p]ٝ{nOwoD9Pmnu_:ux/-yO̼X{wOA$ps >ƒX%qɇڽ IH !$A$-,% LV@3:)`UJETX?!b6D$[]KBtIJLP?Oʹz]s.ɀ@ĭE,AZP, 0*t/[X}wغtA'}$䧟(ڂDљ Piq*ǭ|j3lF}1@S\P q5uۻ*`FmwAAI (ీE:oh,~b"Iw o|٪-!F@}%).,5>| / \du <\gZT/"*2C}xݽJ]r/k-oZdVC D B6)Ia|CjBw߾G j֙( :١Y$āUCLXTbʨ꼈yzaᗆ$P3s#qLqA\@dkKN>@h/:{#I 'Ɖ&Npc)+{ s-O)P4ڇ!aegq~Cƀ 5\4@I9wȩa: D-*6 S<[=:b[raT)9̈5S;2Z\)?V؆U/VL3Fl-l#g-_'Vbw>LK, aPZʠ0`΀ؐ,-\}9#D:eW{t{%ݽ] |3Ko7fs⟐|;~oK|q`fzcwW_yf5/Af۳ :L5yH4{}Ϟ`uG>g_'_FXi/7s|w0z̺zi-SoM{S?Wy %p L,*.IG/666VB72&+ޤflX8103?7665ܔyWf8AIENDB`gnome-activity-journal-0.8.0/data/icons/hicolor/scalable/0000755000175000017500000000000011610346154022702 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/scalable/apps/0000755000175000017500000000000011610346154023645 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/scalable/apps/gnome-activity-journal-paused.svg0000644000175000017500000055611211565730047032275 0ustar rainctrainct image/svg+xml gnome-activity-journal-0.8.0/data/icons/hicolor/scalable/apps/gnome-activity-journal.svg0000644000175000017500000053367711330612741031017 0ustar rainctrainct image/svg+xml gnome-activity-journal-0.8.0/data/icons/hicolor/48x48/0000755000175000017500000000000011610346154021733 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/48x48/apps/0000755000175000017500000000000011610346154022676 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/48x48/apps/gnome-activity-journal.png0000644000175000017500000000526211330612741030015 0ustar rainctrainctPNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< /IDAThYidW}KUUKutOIZnc@WDB'䇂i.OPQјAB H@%Dh@bwbLԬezNW[9mU3!EdPeY`^c-4E>_l R@.@ P"kLa=@4D4 <NoQ$5s:,MC{\^`6[eHy`pX !@HAQy|ΕRےZ1vD*F,<@uX' 8HYd]a/;w \kQUe gVnF܌F9\ES>Qj n)+;\cXl&\;i2,,AY@; kNQ͖0.хoMxK"@Y0+@6e*@5|6_@8]jvf kb'}R0lҥ A{d/ CĎ^ﵒż e*A 5@-0\Йq1D,06$W \ $ߔ2W\ @MNtFЅ}P 0,`hÜ9jc!0R  >ܲkA$Z-.9/)1纍Z=4D(/53tpbvۂ,ɀdvݕbachA!zQDۏUt9{=s[m#ELl}…2Y=#)DBTǔ- DkZ4{BMß;dq9 LJ9Sw kGCtl 0r+͹/? aqBRipet}̅6c )ԠGcJp I@yO f_qDL N HzA{Q bݘL$8Y,!ZlgX"r,݌ؤUpbqΦPq'F]>H\pW!y+lY@BL:.2.\LHTl/] +gN$X'@udH&Cۻo9@ݮ42V A^:af\Y?HWionnnL'(0==S_7O؝] JEY9AeDD}:QX|CbGb.-'# gXDd#[]׽m:GRKi*?ȾCyNyHG;;;Wy@DΝ;_|qsL)ڤ31+B:Fi4pΞ=ݮ]?9utnϞ=;@Ih}}`cc fy˾/M!|4I?IENDB`gnome-activity-journal-0.8.0/data/icons/hicolor/16x16/0000755000175000017500000000000011610346154021721 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/16x16/apps/0000755000175000017500000000000011610346154022664 5ustar rainctrainctgnome-activity-journal-0.8.0/data/icons/hicolor/16x16/apps/gnome-activity-journal.png0000644000175000017500000000144611330612741030003 0ustar rainctrainctPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8u?UΝs E% ]M@F 4bc)vv(bcB,LJDŸcYYuw̛{9xrq9S并6l ො"4ιKɻ>syxca $s/4VhXBŒnm}d:}S/2|%c|^,0#y>(VxhA=U]bPmۧjLƱE)ba|v3K{9ǀGLo_8@L,1Y=αR+c\x,/Gl~K N 5X:l |}ɆG8*9>%034ֈ0L#;Os\+\F1`%4VpX K<fs~oB1}pl)f '7`bP"Γ2~EЈi׫=Z `9j4hWDڕX.M0M@f+T_=aYf }bPU97d xg?![9caK-/#S.~{S/ {d9uz7bꓒѷvgeS7|_,A:IENDB`gnome-activity-journal-0.8.0/data/gnome-activity-journal.xpm0000644000175000017500000002020611330612741023514 0ustar rainctrainct/* XPM */ static char * gnome_activity_journal_xpm[] = { "32 32 380 2", " c None", ". c #955F0A", "+ c #8F5902", "@ c #8F5A03", "# c #905B05", "$ c #915C07", "% c #925D08", "& c #925E09", "* c #96620E", "= c #F1CEA3", "- c #EFC294", "; c #EFC498", "> c #F0C59C", ", c #F0C69F", "' c #F1C9A4", ") c #F2CAA7", "! c #F1CCA9", "~ c #F2CDA9", "{ c #EFC496", "] c #EEC191", "^ c #EDBF8B", "/ c #EDBD86", "( c #ECBA80", "_ c #EBB87A", ": c #EAB674", "< c #E9B36E", "[ c #E8B168", "} c #E7AF61", "| c #E6AC5B", "1 c #E0A550", "2 c #8F5A02", "3 c #9E6B1B", "4 c #F1CDA3", "5 c #F0C69D", "6 c #F1C7A2", "7 c #F1C9A6", "8 c #F2CBAA", "9 c #F3CDAD", "0 c #F2CEAF", "a c #F3CFAF", "b c #F2CDAA", "c c #F0C49A", "d c #EFC295", "e c #EEC08F", "f c #EDBE89", "g c #ECBB83", "h c #EBB97D", "i c #EAB776", "j c #E9B470", "k c #E8B26A", "l c #E7AF63", "m c #E6AD5D", "n c #E5AB56", "o c #A7772B", "p c #F1CCA3", "q c #F2C9A7", "r c #F2CBAC", "s c #F3CEB2", "t c #F4CFB4", "u c #F3D0B5", "v c #F4D1B4", "w c #F2CCAA", "x c #F0C69E", "y c #EFC398", "z c #EEC192", "A c #ECBC85", "B c #EBBA7F", "C c #EAB778", "D c #EAB572", "E c #E9B26B", "F c #E8B065", "G c #E7AD5E", "H c #E6AB58", "I c #925D06", "J c #B2843D", "K c #F1CBA2", "L c #F1C8A5", "M c #F2CBAB", "N c #F3CDB0", "O c #F4D1B8", "P c #F5D2BB", "Q c #F4D3BA", "R c #F4D2B8", "S c #F1CAA9", "T c #F1C7A0", "U c #EEBF8D", "V c #EBB879", "W c #EAB573", "X c #E9B36C", "Y c #E8B066", "Z c #E7AE5F", "` c #97610B", " . c #BB914F", ".. c #F1CAA0", "+. c #F3CFB4", "@. c #F4D2BC", "#. c #F6D4C1", "$. c #F5D4BD", "%. c #F4D1B7", "&. c #F2CAA8", "*. c #F1C7A1", "=. c #F0C59B", "-. c #EEC08E", ";. c #EDBD87", ">. c #ECBB80", ",. c #EAB673", "'. c #E9B36D", "). c #E6AB59", "!. c #A06911", "~. c #905902", "{. c #C59D62", "]. c #F0C99E", "^. c #F4D1B9", "/. c #F5D3BC", "(. c #F4D3BB", "_. c #F4CFB2", ":. c #A9711A", "<. c #925D05", "[. c #CFAB74", "}. c #F0C69A", "|. c #F2CCAF", "1. c #F4D0B4", "2. c #F4D2B7", "3. c #F1C8A4", "4. c #EDBF8C", "5. c #EAB97D", "6. c #DD9C3B", "7. c #D38404", "8. c #D28302", "9. c #CC8003", "0. c #B87404", "a. c #935E08", "b. c #D7B886", "c. c #EFC396", "d. c #EFC499", "e. c #F1C8A3", "f. c #F2CAA9", "g. c #F3CEB1", "h. c #F3CFB1", "i. c #EFC395", "j. c #EEC090", "k. c #EDBE8A", "l. c #DE9D3D", "m. c #D99628", "n. c #F0D09D", "o. c #F9EAD5", "p. c #F5DEBB", "q. c #ECC484", "r. c #E5BB77", "s. c #D29F4C", "t. c #B77407", "u. c #955F0B", "v. c #E1C397", "w. c #F2CDAB", "x. c #F2CBA7", "y. c #D78D19", "z. c #E6B668", "A. c #EFD09D", "B. c #F7E8D1", "C. c #EFD1A3", "D. c #D4A252", "E. c #B37715", "F. c #945F09", "G. c #EACFA4", "H. c #EFC397", "I. c #F1C8A1", "J. c #F1CAA5", "K. c #F0C79E", "L. c #EDBD88", "M. c #D5890F", "N. c #E7BB74", "O. c #EAC07C", "P. c #DDA447", "Q. c #DBA143", "R. c #B0771A", "S. c #955D03", "T. c #915B04", "U. c #F1D7B0", "V. c #F0C497", "W. c #F0C69B", "X. c #F0C89F", "Y. c #ECBC83", "Z. c #EBBA7E", "`. c #D7993B", " + c #CE9334", ".+ c #EACA97", "++ c #EED1A2", "@+ c #EDCE9B", "#+ c #EBCA95", "$+ c #E9C68F", "%+ c #E6C084", "&+ c #D7A85D", "*+ c #B17A20", "=+ c #915C04", "-+ c #8F5C08", ";+ c #F3D8B1", ">+ c #ECBB81", ",+ c #EDBE8B", "'+ c #EFC190", ")+ c #EFC495", "!+ c #ECBB82", "~+ c #E7B26F", "{+ c #CE933D", "]+ c #B47613", "^+ c #A96E0E", "/+ c #A46A0D", "(+ c #9E660E", "_+ c #99620E", ":+ c #96620C", "<+ c #BD9149", "[+ c #C3954C", "}+ c #935C04", "|+ c #936214", "1+ c #F2D6AB", "2+ c #EBB97B", "3+ c #ECBD85", "4+ c #EDC08B", "5+ c #EEC28F", "6+ c #EEBF8B", "7+ c #EBB97C", "8+ c #E8B166", "9+ c #E6AD5C", "0+ c #E5AA56", "a+ c #E4A850", "b+ c #DB9D43", "c+ c #95610C", "d+ c #C79B56", "e+ c #915B03", "f+ c #986A22", "g+ c #F1D3A6", "h+ c #EAB675", "i+ c #EBB778", "j+ c #EDBF89", "k+ c #ECBA7F", "l+ c #E9B46F", "m+ c #E8B26B", "n+ c #E7AF62", "o+ c #E6AB57", "p+ c #E5A952", "q+ c #E4A74D", "r+ c #E3A547", "s+ c #B87E21", "t+ c #905A03", "u+ c #9F7431", "v+ c #F1CFA0", "w+ c #EAB879", "x+ c #EBBB7F", "y+ c #ECBC80", "z+ c #EAB777", "A+ c #E5A953", "B+ c #E4A74E", "C+ c #E3A549", "D+ c #E3A343", "E+ c #E2A240", "F+ c #9C6813", "G+ c #A88143", "H+ c #EFCB98", "I+ c #E8B269", "J+ c #E9B46E", "K+ c #E9B573", "L+ c #EAB978", "M+ c #E9B572", "N+ c #E9B571", "O+ c #E8B167", "P+ c #E7B064", "Q+ c #E7AE60", "R+ c #E3A649", "S+ c #E3A444", "T+ c #A4701B", "U+ c #724800", "V+ c #B18E56", "W+ c #EFC891", "X+ c #E9B46D", "Y+ c #E9B773", "Z+ c #E7AE61", "`+ c #E6AD5E", " @ c #E6AC5A", ".@ c #E3A445", "+@ c #AD7823", "@@ c #8D5B09", "#@ c #6F4402", "$@ c #BC9D69", "%@ c #EDC487", "&@ c #E5AA54", "*@ c #E5A851", "=@ c #B8812B", "-@ c #8E5B07", ";@ c #6D4705", ">@ c #C6AB7D", ",@ c #ECBF7E", "'@ c #E7AF60", ")@ c #E5AB57", "!@ c #E5A951", "~@ c #E4A64B", "{@ c #E2A343", "]@ c #C48B32", "^@ c #8F5B06", "/@ c #6B460A", "(@ c #D2B78D", "_@ c #EABB74", ":@ c #E4A84F", "<@ c #E5A954", "[@ c #E6AD5A", "}@ c #E5AA55", "|@ c #E3A548", "1@ c #E2A341", "2@ c #CF9437", "3@ c #8F5A05", "4@ c #684309", "5@ c #DDC49D", "6@ c #EBC07F", "7@ c #EFCE99", "8@ c #F5DFBC", "9@ c #F5DFBD", "0@ c #F5E0BE", "a@ c #F5DFBB", "b@ c #F5DFBA", "c@ c #F4DBB4", "d@ c #F3D8AE", "e@ c #F1D4A7", "f@ c #F0D2A2", "g@ c #F0CE9B", "h@ c #EFCB94", "i@ c #ECC88C", "j@ c #EDC486", "k@ c #ECC17E", "l@ c #EABE78", "m@ c #E9BB71", "n@ c #E8B86B", "o@ c #E8B366", "p@ c #E7B15F", "q@ c #E6AE58", "r@ c #DFA54D", "s@ c #613F06", "t@ c #ECD6B1", "u@ c #F3DAB2", "v@ c #E4B46A", "w@ c #D7962E", "x@ c #D59025", "y@ c #D69225", "z@ c #D59023", "A@ c #D58E23", "B@ c #D58F23", "C@ c #D48E23", "D@ c #D48F23", "E@ c #CC881E", "F@ c #C08118", "G@ c #B67814", "H@ c #AA6E0F", "I@ c #9E6609", "J@ c #8F5D0C", "K@ c #6F4F17", "L@ c #F5DEBC", "M@ c #E8C081", "N@ c #E5BC7A", "O@ c #FCF6EE", "P@ c #FFFFFF", "Q@ c #527AAE", "R@ c #50729B", "S@ c #EAD4AE", "T@ c #D89731", "U@ c #F9F0E1", "V@ c #F2F2F1", "W@ c #EEEEEC", "X@ c #4370AB", "Y@ c #808787", "Z@ c #613D03", "`@ c #715017", " # c #C1903F", ".# c #E4B977", "+# c #FCF8F1", "@# c #688BB8", "## c #4A72A5", "$# c #5E3E08", "%# c #5D3C03", "&# c #5C3A01", "*# c #5F3F09", "=# c #868A84", "-# c #888C84", ";# c #878B85", " ", " ", " . + + + + + @ # $ % & @ + + + + + + + + + + + + ", " * = - ; > , ' ) ! ~ ~ { ] ^ / ( _ : < [ } | 1 2 ", " 3 4 ; 5 6 7 8 9 0 a b c d e f g h i j k l m n @ ", " o p > 6 q r s t u v w x y z ^ A B C D E F G H I ", " J K x L M N O P Q R S T c - U / ( V W X Y Z H ` ", " ..., 7 r +.@.#.$.%.&.*.=.- -.;.>._ ,.'.Y Z ).!. ", " ~.{.].x L M s ^./.(._.q *.c - U ;.( _ W X Y Z ).:. ", " <.[.}.> 6 &.|.1.%.2.r 3.x ; z 4.5.6.7.8.8.8.8.8.9.0. ", " a.b.c.d.x e.f.9 g.h.L T =.i.j.k.l.m.n.o.p.q.q.r.s.t. ", " u.v.j.d d.5 ' ) w.x., =.c.z 4./ y.z.A.B.C.q.q.r.D.E. ", " F.G.^ j.- H.5 I.J.K.; i.] U L.g M.N.O.P.Q.q.q.r.D.R.S. ", " T.U./ k.-.] V.W.X.- z e 4.L.Y.Z.`. +.+++@+#+$+%+&+*+=+ ", " -+;+>+A L.,+'+)+)+U ^ f / !+Z._ ~+{+]+^+/+(+_+:+<+[+}+ ", " |+1+2+B !+3+4+5+6+/ A g ( 7+V : j E 8+} 9+0+a+b+c+d+e+ ", " f+g+h+i+2+B 3+j+( k+Z.7+_ i W l+m+8+n+m o+p+q+r+s+t+# ", " u+v+l+D : w+x+y+V C z+h+W j '.k Y } m H A+B+C+D+E+F+ ", " G+H+I+X J+K+L+i M+N+j l+X k O+P+Q+9+H A+B+R+S+E+E+T+ ", " U+V+W+l F O+X+Y+m+m+k I+[ Y P+Z+`+ @n p+B+R+.@E+E+E++@@@ ", " #@$@%@9+Z Q+8+k P+P+l n+} Z m @H &@*@q+C+S+E+E+E+E+=@-@ ", " ;@>@,@0+H | } '@m m 9+| @).)@&@!@B+~@r+{@E+E+E+E+E+]@^@ ", " /@(@_@:@!@<@[@n 0+0+}@}@A+p+a+B+~@|@.@1@E+E+E+E+E+E+2@3@ ", " 4@5@6@7@8@9@0@a@a@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@@ ", " s@t@u@v@w@x@y@z@z@z@z@z@z@z@z@z@A@B@B@C@D@D@E@F@G@H@I@J@ ", " K@L@M@N@O@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Q@R@ ", " s@S@T@U@P@P@P@P@V@W@W@W@W@W@W@W@W@V@P@P@V@W@W@W@W@X@Y@ ", " Z@`@ #.#+#P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@@### ", " $#%#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#*# ", " =#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#;# ", " ", " "}; gnome-activity-journal-0.8.0/data/zlogo/0000755000175000017500000000000011610346154017514 5ustar rainctrainctgnome-activity-journal-0.8.0/data/zlogo/zg6.png0000644000175000017500000000246411340031655020733 0ustar rainctrainctPNG  IHDRr ߔsRGBbKGD pHYs  tIME3 lIDATHݖKhuM`Rkf|VXQэ^AEDP)ՅNP|P\ݸ]p"*.-*mm5Xk[-m4mr; i5U7z7sje1c61`T++j3kl4[-aH)6&qe[TI\IO VW#6 k,]8Arݾ-۞Jslxx|{W,\y34 ̓lc{\*/0& Cǚz+}'t\ik>t¸W})nU xfJZ(#ܳb1]) I6J,[4/;ro=滾kUE`*{A1欮=zSVQٲEth3KHm0e 뵓b "lhc:? ܸdqKAhsc,jjEC4eŹ]l+;aӞ~Ír!]`6V\X(!?fws&vhaЙڧιvWTK#ĕ4꯯CY(wxS=+waβW]գv /,FR+yh 6_V{l Mw>g2Rg6m!$$'Lb 9ntɗ;3t,S~݇GY?:K!ػ"fL(61\ Yǽ-C#~x7*Ƒ~8 /CP_ Ms~,-ϿQ@IWv ۀeMjQu|/ Mc-W?`m򳻲x^U*l*El{x|BbNgvorhdvr<;0x,+b>2 at¸W})nU xfJZ(#ܳb1]) I6J,[4/;ro=滾kUE`*{A1欮=zSVQٲEth3KHm0e 뵓b "lhc:? ܸdqKAhsc,jjEC4eŹ]l+;aӞ~Ír!]`6V\X(!?fws&vhaЙڧιvWTK#ĕ4꯯CY(wxS=+waβW]գv /,FR+yh 6_V{l Mw>g2Rg6m!$$'Lb 9ntɗ;3t,S~݇GY?:K!ػ"fL(61\ Yǽ-C#~x7*Ƒ~8 /CP_ Ms~,-ϿQ@IWv ۀeMjQu|/ Mc-W?`m򳻲x^U*l*El{x|BbNgl tE'of9Kn{mAȠn)e1,uv[ zH6Cjk5e]gҾL`&YEשf] JҖɊytu "0s?96D${;7g/4 @]Y}7**${yh~ftۍLr`|^,mw"ewL  -A#T+eF&K]w7o$Qtzˋ=5 2 ,4$nv󬿽9O⺫ggcL\] 3EY2ۺ˦Si7N4k[f@HH䪺E7V(]*9U_}7}GD;WHgB$-|\j.`J+h !uN]Ϭ IENDB`gnome-activity-journal-0.8.0/data/zlogo/zg0.png0000644000175000017500000000234311340031655020721 0ustar rainctrainctPNG  IHDRr ߔsRGBbKGD pHYs  tIME.>cIDATHݖ[Tu?s캶*,*ʊ%TDr 9B=DADQoE+#+[g +;2;;3\vvm^ja~wGnu(HAUf>i@+&=.YYwNU!BUI{ʺiϱ7ؕu9.uȅIc?¡# ]Dt2^;O=< tV5wJN9{XN%9rc lU.xt-[V,AdZ-sc M1ĭ>7h)כ)3gW"OYʓ+;)*㵽"0US=KٲJly=.ʺg@@}ڛxi}oG`–f-i-&aTU|m( D*kns)^dG{R,#"x4ydB XY5V rFςHaUUeA+vqDP"ʺi(Jb "Xs[))LT 秄9L5cEHNSBtMw}C7;[6V;NF.J sYQ} ?3b`=Y ̞o浲tN8{H4c?;i6߀1C<3Aj% oo\|??N{sG <  *jɛ{~"aLG.7(f:R!Q; ai3-z2VU^hos1y~VaWhJ}b˫%ҁ~8w s%˖'Y."FP:6CYTAf.,_,|w;k>˕>ϧGOKhJجnlxEQHz~dWEX(~2mGNa;pg~>[-OҔL͞A/6Xgz]d 03/0D7Hv4ϝ -W-@m%@O`uQ)PvUI[ml]0/GP-+Kq.w(Ljc4:;PNzb<3.iD E{/R3/Ah2.}ژz.1 j}$,TWӳaZ{6<4*}5 ߗP?qd~^~x`Elu:jnj "PJcϲ9yxpF//P_d'BZvδVD FoF=36\齚1(@D\GZq"pTZY(BZh )eqxdvzF">.ӛ`a`R>DÁZݞFJ3Q1rՊf\]FXQ}jɪu&\E^3njTjv  IZ ^ Tm]"6ZKyUuZ{iZQ#r"p,^IENDB`gnome-activity-journal-0.8.0/data/zlogo/zg5.png0000644000175000017500000000240611340031655020726 0ustar rainctrainctPNG  IHDRr ߔsRGBbKGD pHYs  tIME2)t-'IDATHݖ[le햚KTDC&: OM$&!>o\  A4(7i [vs|鶵E9;|s q?*:%/"?\C?Le\9ʸS@Pq#BW  "fI*+=Φ2nsmg\sl>]%\W:cq̚<d{-npDmUsgnY9~,1U+~ߏl?ʸ_~vn/&w@XF[`X>^T! F$jV}}dڙkHjrc`8W[D$."tym}d T ھ*5h1uي>ӹ:3kAQUXݧ(!M9$,&QQU(|3d|}n, ]z^1cX6c="cj`* ).>sʠwDŭȶeQP3'Q(k-@lL}5AT.JYg ˢXɗ|qwŸDXEtfXcEANK(Ck:FGIϚΚ3Ya&Bғ0-tbC*+ ]a?soOq'A%+XG/\%y}y$|Čpk^擼A6Fl[Fþ֋T,PU xHz}Us 7sz,1XXGd]DYeY8{;`$DSY"l{#篒 cs[U؄RW6m93[|B]<{[Yi7Ԕ[T&k<'7eK"b3`wv -pڪ8|"9v>59'裣6T&{dBXA*~`VsһkFElyQ ZX,#QTTkxJ5}Ul@`rb}G `_G^E9 Py"? "xGK2C1"ǩn;5lX,_d1J2B/&"zKS%ZDs^GIENDB`gnome-activity-journal-0.8.0/data/zeitgeist-logo.svg0000644000175000017500000001005711340031655022050 0ustar rainctrainct image/svg+xml gnome-activity-journal-0.8.0/data/pin.svg0000644000175000017500000002364711330612741017702 0ustar rainctrainct image/svg+xml gnome-activity-journal-0.8.0/COPYING0000644000175000017500000010437411330612741016512 0ustar rainctrainct GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnome-activity-journal-0.8.0/setup.py0000755000175000017500000000771211433556176017207 0ustar rainctrainct#! /usr/bin/env python # -.- coding: utf-8 -.- # # GNOME Activity Journal - Installation script # # Copyright © 2009-2010 Siegfried Gevatter # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from __future__ import with_statement import os from glob import glob from distutils.core import setup from DistUtilsExtra.command import * class _build_i18n(build_i18n.build_i18n): def run(self): # Generate POTFILES.in from POTFILES.in.in if os.path.isfile("po/POTFILES.in.in"): lines = [] with open("po/POTFILES.in.in") as f: for line in f: lines.extend(glob(line.strip())) with open("po/POTFILES.in", "w") as f: f.write("\n".join(lines) + "\n") build_i18n.build_i18n.run(self) def recursive_install(dst, directory, prefix=None, ext=None): l = [] this = [] for name in glob('%s/*' % directory): if os.path.isdir(name): l.extend(recursive_install(dst, name, os.path.join(prefix, os.path.basename(name)) if prefix is not None else None)) elif not ext or os.path.splitext(name)[1] in ext: this.append(name) l.append((os.path.join(dst, prefix if prefix is not None else directory), this)) return l def list_from_lists(*args): l = [] for arg in args: l.extend(arg) return l try: VERSION = [line for line in open('src/config.py') if line.startswith('VERSION')][0].split('"')[1] except (IOError, IndexError): VERSION = 'unknown' setup( name = 'gnome-activity-journal', version = VERSION, description = 'GUI to browse and search your Zeitgeist activities', long_description = \ 'GNOME Activity Journal is a tool for easily browsing and finding '\ 'files on your computer. It shows a chronological journal of all '\ 'file activity and supports full-text search through Tracker.', author = 'GNOME Activity Journal Developers', author_email = 'zeitgeist@lists.launchpad.net', url = 'https://launchpad.net/gnome-activity-journal', license = 'GPLv3+', platforms = ['GNU/Linux'], data_files = list_from_lists( [('bin/', ['gnome-activity-journal'])], [('share/gnome-activity-journal/data', glob('data/*.svg'))], [('share/gnome-activity-journal/data', glob('data/*.png'))], [('share/gnome-activity-journal/data/zlogo', glob('data/zlogo/*.png'))], [('share/pixmaps/', ['data/gnome-activity-journal.xpm'])], recursive_install('share/icons/hicolor', 'data/icons/hicolor/', '', ext=['.png', '.svg']), recursive_install('share/gnome-activity-journal', 'src/', ext=['.py']), [('share/man/man1/', ['extra/gnome-activity-journal.1'])], [('share/gnome-activity-journal/fungtk', glob('fungtk/*.py'))], [('share/zeitgeist/_zeitgeist/engine/extensions/', glob('extension/*.py'))], ), cmdclass = { 'build': build_extra.build_extra, 'build_i18n': _build_i18n, #'build_help': build_help.build_help, #'build_icons': build_icons.build_icons, }, classifiers = [ # http://pypi.python.org/pypi?%3Aaction=list_classifiers 'License :: OSI-Approved :: GNU General Public License (GPL)', 'Intended Audience :: End Users/Desktop', 'Development Status :: 3 - Alpha', 'Programming Language :: Python', 'Environment :: X11 Applications :: GTK', ] ) gnome-activity-journal-0.8.0/AUTHORS0000644000175000017500000000075711565726556016553 0ustar rainctrainctPrimary Contact: ---------------- Seif Lotfy Developers: ----------- Seif Lotfy Randal Barlow Siegfried-Angel Gevatter Peter Lund Hylke Bons Markus Korn Mikkel Kamstrup Stefano Candori Design & Artwork: ----------------- Hylke Bons Thorsten Prante gnome-activity-journal-0.8.0/extra/0000755000175000017500000000000011610346154016574 5ustar rainctrainctgnome-activity-journal-0.8.0/extra/gnome-activity-journal.schemas.in0000644000175000017500000000435311330612741025157 0ustar rainctrainct /schemas/apps/gnome-activity-journal/window_width /apps/gnome-activity-journal/window_width gnome-activity-journal int Window width Customized width for the main window, in pixels (requires restart). Can't be bigger than the desktop's size. /schemas/apps/gnome-activity-journal/window_height /apps/gnome-activity-journal/window_height gnome-activity-journal int Window height Customized height for the main window, in pixels (requires restart). Can't be bigger than the desktop's size. /schemas/apps/gnome-activity-journal/amount_days /apps/gnome-activity-journal/amount_days gnome-activity-journal int Amount of visible days The amount of days to show at once. /schemas/apps/gnome-activity-journal/accessibility /apps/gnome-activity-journal/accessibility gnome-activity-journal bool False Accessibility Whether special accessibility options should be enabled (requires restart). /schemas/apps/gnome-activity-journal/small_thumbnails /apps/gnome-activity-journal/small_thumbnails gnome-activity-journal bool False Allow thumbnails as icons Whether to allow showing little thumbnails next to each activity (requires restart). If False, only generic mime-type icons will be used. gnome-activity-journal-0.8.0/extra/gnome-activity-journal.desktop.in0000644000175000017500000000040311330612741025175 0ustar rainctrainct[Desktop Entry] Type=Application _Name=Activity Journal _GenericName=Activity Journal _Comment=Browse a chronological log of your activities and easily find files, contacts, etc. Exec=gnome-activity-journal Icon=gnome-activity-journal Categories=GTK;Utility; gnome-activity-journal-0.8.0/extra/gnome-activity-journal.10000644000175000017500000000317611330612741023271 0ustar rainctrainct.TH GNOME\-ACTIVITY\-JOURNAL 1 "January 19, 2010" .SH NAME gnome\-activity\-journal \- browse and search a chronological log of your activities .SH SYNOPSIS \fBgnome\-activity\-journal\fP \fI[OPTIONS]\fP .SH DESCRIPTION \fBgnome\-activity\-journal\fP is a tool for easily browsing and finding files on your computer. It shows a chronological journal of all file activity and supports full-text search through Tracker. .SH OPTIONS The program follows the usual GNU command line syntax, with options starting with two dashes (`--'). A summary of options is included below. .TP .B \-\-version Shows the version number and exits. .TP .B \-h, \-\-help Shows a short help message listing all supported options and exits. .TP .B \-\-debug Prints additional debug information. .SH SEE ALSO \fBzeitgeist\-daemon\fR, \fBtracker\-store\fR .SH BUGS Please report any bugs on https://bugs.launchpad.net/gnome-activity-journal. .SH AUTHORS Please see the AUTHORS file bundled with this application for a complete list of contributors. .SH LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. .PP This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .PP You should have received a copy of the GNU General Public License along with this program. If not, see . gnome-activity-journal-0.8.0/setup.cfg0000644000175000017500000000040011330612741017261 0ustar rainctrainct[build_i18n] domain=gnome-activity-journal bug_contact=zeitgeist@lists.launchpad.net desktop_files=[('share/applications', ('extra/gnome-activity-journal.desktop.in',))] schemas_files=[('share/gconf/schemas', ('extra/gnome-activity-journal.schemas.in',))]