diff options
author | Andi_G <andigros72@googlemail.com> | 2011-01-17 22:29:09 (GMT) |
---|---|---|
committer | Andi_G <andigros72@googlemail.com> | 2011-01-17 22:29:09 (GMT) |
commit | 7aab67189856a1c34835b819c42a8093a602a00e (patch) | |
tree | cfc70a9c1af0b1d70f1f117ae88e12306db5e7d5 | |
parent | 9a954fd57f69d407a7919d8ab641c638e54bbb6e (diff) |
the first experimental version that allows annotation sharing
273 files changed, 13460 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..3bb3b51 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,266 @@ +readdialog.py +README +annotation.svg +epubadapter.py +annobookmark.py +readtopbar.py +readsidebar.py +annoactivity.py +anno_v1.db +readtoolbar.py +setup.py +readdb.py +epubview/__init__.py +epubview/epub.py +epubview/widgets.py +epubview/jobs.py +epubview/epubview.py +epubview/navmap.py +epubview/epubinfo.py +locale/mr/activity.linfo +locale/mr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/he/activity.linfo +locale/he/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/qu/activity.linfo +locale/qu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/kos/activity.linfo +locale/kos/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ug/activity.linfo +locale/ug/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/dz/activity.linfo +locale/dz/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/nl/activity.linfo +locale/nl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ml/activity.linfo +locale/ml/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/bg/activity.linfo +locale/bg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/es/activity.linfo +locale/es/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ff/activity.linfo +locale/ff/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/gu/activity.linfo +locale/gu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ms/activity.linfo +locale/ms/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/yo/activity.linfo +locale/yo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/zh_TW/activity.linfo +locale/zh_TW/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sq/activity.linfo +locale/sq/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/mg/activity.linfo +locale/mg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pap/activity.linfo +locale/pap/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/fa_AF/activity.linfo +locale/fa_AF/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/af/activity.linfo +locale/af/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sl/activity.linfo +locale/sl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pt_BR/activity.linfo +locale/pt_BR/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/si/activity.linfo +locale/si/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/rw/activity.linfo +locale/rw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/cs/activity.linfo +locale/cs/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/te/activity.linfo +locale/te/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ur/activity.linfo +locale/ur/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/km/activity.linfo +locale/km/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/en_US/activity.linfo +locale/en_US/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/wa/activity.linfo +locale/wa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/is/activity.linfo +locale/is/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pl/activity.linfo +locale/pl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/hu/activity.linfo +locale/hu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ro/activity.linfo +locale/ro/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pt/activity.linfo +locale/pt/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sd/activity.linfo +locale/sd/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/hi/activity.linfo +locale/hi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/th/activity.linfo +locale/th/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/mn/activity.linfo +locale/mn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/bn/activity.linfo +locale/bn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/el/activity.linfo +locale/el/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ay/activity.linfo +locale/ay/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/tzo/activity.linfo +locale/tzo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/en/activity.linfo +locale/en/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ps/activity.linfo +locale/ps/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/zh_CN/activity.linfo +locale/zh_CN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/de/activity.linfo +locale/de/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/vi/activity.linfo +locale/vi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ru/activity.linfo +locale/ru/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/bn_IN/activity.linfo +locale/bn_IN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ca/activity.linfo +locale/ca/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ta/activity.linfo +locale/ta/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/tpi/activity.linfo +locale/tpi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/tr/activity.linfo +locale/tr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ne/activity.linfo +locale/ne/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sv/activity.linfo +locale/sv/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/bi/activity.linfo +locale/bi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ht/activity.linfo +locale/ht/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ha/activity.linfo +locale/ha/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/fr/activity.linfo +locale/fr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/id/activity.linfo +locale/id/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/mvo/activity.linfo +locale/mvo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ig/activity.linfo +locale/ig/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/it/activity.linfo +locale/it/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/fi/activity.linfo +locale/fi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/da/activity.linfo +locale/da/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pa/activity.linfo +locale/pa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/mk/activity.linfo +locale/mk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/mi/activity.linfo +locale/mi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/tvl/activity.linfo +locale/tvl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/fil/activity.linfo +locale/fil/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ar/activity.linfo +locale/ar/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/am/activity.linfo +locale/am/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/fa/activity.linfo +locale/fa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/cpp/activity.linfo +locale/cpp/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sk/activity.linfo +locale/sk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/pis/activity.linfo +locale/pis/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ja/activity.linfo +locale/ja/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/ko/activity.linfo +locale/ko/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/sw/activity.linfo +locale/sw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +locale/nb/activity.linfo +locale/nb/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo +activity/activity.info +activity/activity-anno.svg +activity/mimetypes.xml +po/ps.po +po/pis.po +po/ha.po +po/fr.po +po/mvo.po +po/zh_CN.po +po/qu.po +po/sl.po +po/pl.po +po/en.po +po/ay.po +po/tpi.po +po/sd.po +po/th.po +po/tzo.po +po/rw.po +po/ta.po +po/ne.po +po/ht.po +po/fi.po +po/pap.po +po/mi.po +po/km.po +po/is.po +po/ko.po +po/fil.po +po/sv.po +po/hi.po +po/ff.po +po/it.po +po/tr.po +po/bg.po +po/mg.po +po/el.po +po/sk.po +po/te.po +po/da.po +po/am.po +po/ug.po +po/ro.po +po/id.po +po/gu.po +po/cpp.po +po/pt.po +po/ca.po +po/es.po +po/si.po +po/pa.po +po/ig.po +po/ml.po +po/ur.po +po/hu.po +po/mk.po +po/en_US.po +po/ar.po +po/vi.po +po/kos.po +po/fa.po +po/zh_TW.po +po/sw.po +po/ru.po +po/Read.pot +po/dz.po +po/bi.po +po/yo.po +po/he.po +po/mr.po +po/fa_AF.po +po/wa.po +po/de.po +po/bn_IN.po +po/ms.po +po/sq.po +po/mn.po +po/nb.po +po/ja.po +po/tvl.po +po/cs.po +po/nl.po +po/af.po +po/bn.po +po/pt_BR.po diff --git a/activity/activity-anno.svg b/activity/activity-anno.svg new file mode 100644 index 0000000..775225c --- /dev/null +++ b/activity/activity-anno.svg @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + enable-background="new 0 0 55 55" + height="55px" + version="1.1" + viewBox="0 0 55 55" + width="55px" + x="0px" + xml:space="preserve" + y="0px" + id="svg2" + inkscape:version="0.47 r22583" + sodipodi:docname="activity-read.svg"><metadata + id="metadata17"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs15"><inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 27.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="55 : 27.5 : 1" + inkscape:persp3d-origin="27.5 : 18.333333 : 1" + id="perspective19" /></defs><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="784" + inkscape:window-height="868" + id="namedview13" + showgrid="false" + inkscape:zoom="4.2909091" + inkscape:cx="27.5" + inkscape:cy="27.033898" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /><g + display="block" + id="activity-read"> + <path + d="M27.904,11.023h-0.002 c0-0.002-1.71-2.053-9.376-2.504C10.86,8.07,6.843,10.121,6.84,10.122c-1.898,0.619-3.495,1.735-3.495,3.494v27.702 c0,2.025,1.235,3.494,3.495,3.494c0.003,0,4.41-1.35,10.004-1.35c5.589-0.001,11.061,2.253,11.061,2.253" + display="inline" + fill="#FFFFFF" + stroke="#010101" + stroke-linejoin="round" + stroke-width="3.5" + id="path5" /> + <path + d="M27.898,11.023 L27.898,11.023c0-0.002,1.715-2.053,9.377-2.504c7.668-0.449,11.686,1.602,11.688,1.603c1.897,0.619,3.494,1.735,3.494,3.494 v27.702c0,2.025-1.233,3.494-3.494,3.494c-0.003,0-4.409-1.35-10.004-1.35c-5.589-0.001-11.062,2.253-11.062,2.253" + display="inline" + fill="#FFFFFF" + stroke="#010101" + stroke-linejoin="round" + stroke-width="3.5" + id="path7" /> + + <line + display="inline" + fill="none" + stroke="#010101" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="3.5" + x1="27.898" + x2="27.9" + y1="11.023" + y2="45.717" + id="line9" /> + <path + d=" M32.566,44.275c0,0-0.031,2.906-4.666,2.906c-4.632,0-4.663-2.906-4.663-2.906" + display="inline" + fill="none" + stroke="#010101" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="3.5" + id="path11" /> +</g><text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="34.258476" + y="30.762712" + id="text2825"><tspan + sodipodi:role="line" + id="tspan2827" + x="34.258476" + y="30.762712" + style="font-size:16;-inkscape-font-specification:cmr10;font-family:cmr10">A</tspan></text> +</svg>
\ No newline at end of file diff --git a/activity/activity.info b/activity/activity.info new file mode 100644 index 0000000..de7c48c --- /dev/null +++ b/activity/activity.info @@ -0,0 +1,9 @@ +[Activity] +name = Anno +service_name = org.laptop.sugar.AnnoActivity +icon = activity-anno +exec = sugar-activity annoactivity.AnnoActivity +show_launcher = no +activity_version = 1 +mime_types = application/pdf;image/vnd.djvu;image/x.djvu;image/tiff;application/x-cbz;application/x-cbr;application/epub+zip +license = GPLv2+ diff --git a/activity/mimetypes.xml b/activity/mimetypes.xml new file mode 100644 index 0000000..5c27572 --- /dev/null +++ b/activity/mimetypes.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="application/epub+zip"> + <comment xml:lang="en">Epub document</comment> + <glob pattern="*.epub"/> + </mime-type> +</mime-info> diff --git a/anno_v1.db b/anno_v1.db Binary files differnew file mode 100644 index 0000000..fac21dd --- /dev/null +++ b/anno_v1.db diff --git a/annoactivity.py b/annoactivity.py new file mode 100644 index 0000000..e5a3bbc --- /dev/null +++ b/annoactivity.py @@ -0,0 +1,1033 @@ +# Copyright (C) 2007, Red Hat, Inc. +# Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/> +# Copyright 2008 One Laptop Per Child +# Copyright 2009 Simon Schampijer +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import os +import time +from gettext import gettext as _ +import re +import md5 + +import dbus +import evince +import gobject +import gtk +import pango +from glib import GError +import telepathy + +from sugar.activity import activity +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.toolbarbox import ToolbarBox +from sugar.graphics.toolbarbox import ToolbarButton +from sugar.graphics.toggletoolbutton import ToggleToolButton +from sugar.graphics.menuitem import MenuItem +from sugar.activity.widgets import ActivityToolbarButton +from sugar.activity.widgets import StopButton +from sugar import network +from sugar import mime + +from jarabe.journal import journalactivity +from sugar.datastore import datastore +from sugar.graphics.objectchooser import ObjectChooser + +from readtoolbar import EditToolbar, ViewToolbar +from readsidebar import Sidebar +from readtopbar import TopBar + + +_EPUB_SUPPORT = True +try: + import epubadapter +except: + _EPUB_SUPPORT = False + + +_HARDWARE_MANAGER_INTERFACE = 'org.laptop.HardwareManager' +_HARDWARE_MANAGER_SERVICE = 'org.laptop.HardwareManager' +_HARDWARE_MANAGER_OBJECT_PATH = '/org/laptop/HardwareManager' + +_TOOLBAR_READ = 2 + +_logger = logging.getLogger('anno-activity') + +def _get_screen_dpi(): + xft_dpi = gtk.settings_get_default().get_property('gtk-xft-dpi') + _logger.debug('Setting dpi to %f', float(xft_dpi / 1024)) + return float(xft_dpi / 1024) + +def get_md5(filename): #FIXME: Should be moved somewhere else + filename = filename.replace('file://', '') #XXX: hack + fh = open(filename) + digest = md5.new() + while 1: + buf = fh.read(4096) + if buf == "": + break + digest.update(buf) + fh.close() + return digest.hexdigest() + +class AnnoHTTPRequestHandler(network.ChunkedGlibHTTPRequestHandler): + """HTTP Request Handler for transferring document while collaborating. + + RequestHandler class that integrates with Glib mainloop. It writes + the specified file to the client in chunks, returning control to the + mainloop between chunks. + + """ + def translate_path(self, path): + """Return the filepath to the shared document.""" + return self.server.filepath + + +class AnnoHTTPServer(network.GlibTCPServer): + """HTTP Server for transferring document while collaborating.""" + def __init__(self, server_address, filepath): + """Set up the GlibTCPServer with the AnnoHTTPRequestHandler. + + filepath -- path to shared document to be served. + """ + self.filepath = filepath + network.GlibTCPServer.__init__(self, server_address, + AnnoHTTPRequestHandler) + + +class AnnoURLDownloader(network.GlibURLDownloader): + """URLDownloader that provides content-length and content-type.""" + + def get_content_length(self): + """Return the content-length of the download.""" + if self._info is not None: + return int(self._info.headers.get('Content-Length')) + + def get_content_type(self): + """Return the content-type of the download.""" + if self._info is not None: + return self._info.headers.get('Content-type') + return None + + +READ_STREAM_SERVICE = 'anno-activity-http' + +class AnnoActivity(activity.Activity): + """The Anno sugar activity.""" + def __init__(self, handle): + activity.Activity.__init__(self, handle) + + if hasattr(evince, 'evince_embed_init'): + # if we use evince-2.24 + evince.evince_embed_init() + + self._epub = False + self._document = None + self._fileserver = None + self._object_id = handle.object_id + self._url = '' + + self.connect('key-press-event', self._key_press_event_cb) + self.connect('key-release-event', self._key_release_event_cb) + self.connect('window-state-event', self._window_state_event_cb) + + _logger.debug('Starting Anno...') + + self._view = None + + self._sidebar = Sidebar() + self._sidebar.show() + + toolbar_box = ToolbarBox() + + activity_button = ActivityToolbarButton(self) + toolbar_box.toolbar.insert(activity_button, 0) + activity_button.show() + + self._edit_toolbar = EditToolbar() + self._edit_toolbar.undo.props.visible = False + self._edit_toolbar.redo.props.visible = False + self._edit_toolbar.separator.props.visible = False + self._edit_toolbar.copy.set_sensitive(False) + self._edit_toolbar.copy.connect('clicked', self._edit_toolbar_copy_cb) + self._edit_toolbar.paste.props.visible = False + + edit_toolbar_button = ToolbarButton( + page=self._edit_toolbar, + icon_name='toolbar-edit') + self._edit_toolbar.show() + toolbar_box.toolbar.insert(edit_toolbar_button, -1) + edit_toolbar_button.show() + + self._view_toolbar = ViewToolbar() + self._view_toolbar.connect('needs-update-size', + self.__view_toolbar_needs_update_size_cb) + self._view_toolbar.connect('go-fullscreen', + self.__view_toolbar_go_fullscreen_cb) + view_toolbar_button = ToolbarButton( + page=self._view_toolbar, + icon_name='toolbar-view') + self._view_toolbar.show() + toolbar_box.toolbar.insert(view_toolbar_button, -1) + view_toolbar_button.show() + + self._back_button = self._create_back_button() + toolbar_box.toolbar.insert(self._back_button, -1) + self._back_button.show() + + self._forward_button = self._create_forward_button() + toolbar_box.toolbar.insert(self._forward_button, -1) + self._forward_button.show() + + num_page_item = gtk.ToolItem() + self._num_page_entry = self._create_search() + num_page_item.add(self._num_page_entry) + self._num_page_entry.show() + toolbar_box.toolbar.insert(num_page_item, -1) + num_page_item.show() + + total_page_item = gtk.ToolItem() + self._total_page_label = self._create_total_page_label() + total_page_item.add(self._total_page_label) + self._total_page_label.show() + toolbar_box.toolbar.insert(total_page_item, -1) + total_page_item.show() + + spacer = gtk.SeparatorToolItem() + spacer.props.draw = False + toolbar_box.toolbar.insert(spacer, -1) + spacer.show() + + navigator_toolbar = gtk.Toolbar() + navigator_item = gtk.ToolItem() + self._navigator = self._create_navigator() + navigator_item.add(self._navigator) + self._navigator.show() + navigator_toolbar.insert(navigator_item, -1) + navigator_item.show() + self._navigator_toolbar_button = ToolbarButton(page=navigator_toolbar, + icon_name='view-list') + navigator_toolbar.show() + toolbar_box.toolbar.insert(self._navigator_toolbar_button, -1) + #navigator_toolbar_button.show() + + spacer = gtk.SeparatorToolItem() + spacer.props.draw = False + toolbar_box.toolbar.insert(spacer, -1) + spacer.show() + + annotator_item = gtk.ToolItem() + self._annotator = self._create_annotator() + self._annotator_toggle_handler_id = self._annotator.connect( \ + 'toggled', self.__annotator_toggled_cb) + annotator_item.add(self._annotator) + self._annotator.show() + toolbar_box.toolbar.insert(annotator_item, -1) + annotator_item.show() + + annotator_syncer_item = gtk.ToolItem() + self._annotator_syncer = self._create_annotator_syncer() + self._annotator_syncer_toggle_handler_id = self._annotator_syncer.connect( \ + 'toggled', self.__annotator_syncer_toggled_cb) + annotator_syncer_item.add(self._annotator_syncer) + self._annotator_syncer.show() + toolbar_box.toolbar.insert(annotator_syncer_item, -1) + annotator_syncer_item.show() + + + annotator_downloader_item = gtk.ToolItem() + self._annotator_downloader = self._create_annotator_downloader() + self._annotator_downloader_toggle_handler_id = self._annotator_downloader.connect( \ + 'toggled', self.__annotator_downloader_toggled_cb) + annotator_downloader_item.add(self._annotator_downloader) + self._annotator_downloader.show() + toolbar_box.toolbar.insert(annotator_downloader_item, -1) + annotator_downloader_item.show() + + stop_button = StopButton(self) + stop_button.props.accelerator = '<Ctrl><Shift>Q' + toolbar_box.toolbar.insert(stop_button, -1) + stop_button.show() + + self.set_toolbar_box(toolbar_box) + toolbar_box.show() + + self._vbox = gtk.VBox() + self._vbox.show() + + self._topbar = TopBar() + self._vbox.pack_start(self._topbar, expand = False, fill = False) + + self._hbox = gtk.HBox() + self._hbox.show() + self._hbox.pack_start(self._sidebar, expand=False, fill=False) + + self._vbox.pack_start(self._hbox, expand = True, fill = True) + self.set_canvas(self._vbox) + + # Set up for idle suspend + self._idle_timer = 0 + self._service = None + + # start with sleep off + self._sleep_inhibit = True + + self.unused_download_tubes = set() + self._want_document = True + self._download_content_length = 0 + self._download_content_type = None + # Status of temp file used for write_file: + self._tempfile = None + self._close_requested = False + + self._journal = journalactivity.get_journal() + + + fname = os.path.join('/etc', 'inhibit-ebook-sleep') + if not os.path.exists(fname): + try: + bus = dbus.SystemBus() + proxy = bus.get_object(_HARDWARE_MANAGER_SERVICE, + _HARDWARE_MANAGER_OBJECT_PATH) + self._service = dbus.Interface(proxy, + _HARDWARE_MANAGER_INTERFACE) + self._scrolled.props.vadjustment.connect("value-changed", + self._user_action_cb) + self._scrolled.props.hadjustment.connect("value-changed", + self._user_action_cb) + self.connect("focus-in-event", self._focus_in_event_cb) + self.connect("focus-out-event", self._focus_out_event_cb) + self.connect("notify::active", self._now_active_cb) + + _logger.debug('Suspend on idle enabled') + except dbus.DBusException, e: + _logger.info( + 'Hardware manager service not found, no idle suspend.') + else: + _logger.debug('Suspend on idle disabled') + + self.connect("shared", self._shared_cb) + + h = hash(self._activity_id) + self.port = 1024 + (h % 64511) + + + if handle.uri: + self._load_document(handle.uri) + + if self.shared_activity: + # We're joining + if self.get_shared(): + # Already joined for some reason, just get the document + self._joined_cb(self) + else: + # Wait for a successful join before trying to get the document + self.connect("joined", self._joined_cb) + elif self._object_id is None: + # Not joining, not resuming + self._show_journal_object_picker() + # uncomment this and adjust the path for easier testing + #else: + # self._load_document('file:///home/smcv/tmp/test.pdf') + + def _create_back_button(self): + back = ToolButton('go-previous') + back.set_tooltip(_('Back')) + back.props.sensitive = False + palette = back.get_palette() + previous_page = MenuItem(text_label= _("Previous page")) + palette.menu.append(previous_page) + previous_page.show_all() + previous_annotation = MenuItem(text_label= _("Previous annotation")) + palette.menu.append(previous_annotation) + previous_annotation.show_all() + back.connect('clicked', self.__go_back_cb) + previous_page.connect('activate', self.__go_back_page_cb) + previous_annotation.connect('activate', self.__prev_annotation_activate_cb) + return back + + def _create_forward_button(self): + forward = ToolButton('go-next') + forward.set_tooltip(_('Forward')) + forward.props.sensitive = False + palette = forward.get_palette() + next_page = MenuItem(text_label= _("Next page")) + palette.menu.append(next_page) + next_page.show_all() + next_annotation = MenuItem(text_label= _("Next annotation")) + palette.menu.append(next_annotation) + next_annotation.show_all() + forward.connect('clicked', self.__go_forward_cb) + next_page.connect('activate', self.__go_forward_page_cb) + next_annotation.connect('activate', self.__next_annotation_activate_cb) + return forward + + def _create_search(self): + num_page_entry = gtk.Entry() + num_page_entry.set_text('0') + num_page_entry.set_alignment(1) + num_page_entry.connect('insert-text', + self.__num_page_entry_insert_text_cb) + num_page_entry.connect('activate', + self.__num_page_entry_activate_cb) + num_page_entry.set_width_chars(4) + return num_page_entry + + def _create_total_page_label(self): + total_page_label = gtk.Label() + + label_attributes = pango.AttrList() + label_attributes.insert(pango.AttrSize(14000, 0, -1)) + label_attributes.insert(pango.AttrForeground(65535, 65535, + 65535, 0, -1)) + total_page_label.set_attributes(label_attributes) + + total_page_label.set_text(' / 0') + return total_page_label + + def _create_navigator(self): + navigator = gtk.ComboBox() + navigator.set_add_tearoffs(True) + cell = gtk.CellRendererText() + navigator.pack_start(cell, True) + navigator.add_attribute(cell, 'text', 0) + navigator.props.visible = False + return navigator + + def _create_annotator(self): + annotator = ToggleToolButton('emblem-favorite') + annotator.set_tooltip(_('Add annotation')) + return annotator + + def _create_annotator_syncer(self): + syncer = ToggleToolButton('go-up') + syncer.set_tooltip(_('Sync annotations')) + return syncer + + def _create_annotator_downloader(self): + downloader = ToggleToolButton('go-down') + downloader.set_tooltip(_('Download annotations')) + return downloader + + + def __num_page_entry_insert_text_cb(self, entry, text, length, position): + if not re.match('[0-9]', text): + entry.emit_stop_by_name('insert-text') + return True + return False + + def __num_page_entry_activate_cb(self, entry): + if entry.props.text: + page = int(entry.props.text) - 1 + else: + page = 0 + + if page >= self._document.get_n_pages(): + page = self._document.get_n_pages() - 1 + elif page < 0: + page = 0 + + self._document.get_page_cache().set_current_page(page) + entry.props.text = str(page + 1) + + def __go_back_cb(self, button): + self._view.scroll(gtk.SCROLL_PAGE_BACKWARD, False) + + def __go_forward_cb(self, button): + self._view.scroll(gtk.SCROLL_PAGE_FORWARD, False) + + def __go_back_page_cb(self, button): + self._view.previous_page() + + def __go_forward_page_cb(self, button): + self._view.next_page() + + def __prev_annotation_activate_cb(self, menuitem): + page = self._document.get_page_cache().get_current_page() + annomanager = self._sidebar.get_annotationmanager() + + prev_anno = annomanager.get_prev_annotation(page) + if prev_anno is not None: + _logger.debug('prev annotation page is %d' % prev_anno.page) + self._document.get_page_cache().set_current_page(prev_anno.page + 1) + + + + def __next_annotation_activate_cb(self, menuitem): + page = self._document.get_page_cache().get_current_page() + annomanager = self._sidebar.get_annotationmanager() + + next_anno= annomanager.get_next_annotation(page) + + if next_anno is not None: + _logger.debug('next annotation page is %d' % next_anno.page) + self._document.get_page_cache().set_current_page(next_anno.page + 1) + + + + def __bookmarker_toggled_cb(self, button): + page = self._document.get_page_cache().get_current_page() + if self._bookmarker.props.active: + self._sidebar.add_bookmark(page) + else: + self._sidebar.del_bookmark(page) + + def __annotator_toggled_cb(self, button): + page = self._document.get_page_cache().get_current_page() + if self._annotator.props.active: + self._sidebar.add_annotation(page) + else: + self._sidebar.del_annotation(page) + + def __annotator_syncer_toggled_cb(self, button): + self._sidebar.sync_annotations() + + + def __annotator_downloader_toggled_cb(self, button): + self._sidebar.download_annotations() + + + def __page_changed_cb(self, page, proxy = None): + self._update_nav_buttons() + if hasattr(self._document, 'has_document_links'): + if self._document.has_document_links(): + self._toc_select_active_page() + + self._sidebar.update_for_page(self._document.get_page_cache().get_current_page()) + + self._annotator.handler_block(self._annotator_toggle_handler_id) + self._annotator.props.active = self._sidebar.is_showing_local_bookmark() + self._annotator.handler_unblock(self._annotator_toggle_handler_id) + + def _update_nav_buttons(self): + current_page = self._document.get_page_cache().get_current_page() + self._back_button.props.sensitive = current_page > 0 + self._forward_button.props.sensitive = \ + current_page < self._document.get_n_pages() - 1 + + self._num_page_entry.props.text = str(current_page + 1) + self._total_page_label.props.label = \ + ' / ' + str(self._document.get_n_pages()) + + def _update_toc(self): + if hasattr(self._document, 'has_document_links'): + if self._document.has_document_links(): + self._navigator_toolbar_button.show() + self._navigator.show_all() + + self._toc_model = self._document.get_links_model() + self._navigator.set_model(self._toc_model) + self._navigator.set_active(0) + + self._navigator_changed_handler_id = \ + self._navigator.connect('changed', + self.__navigator_changed_cb) + + self._toc_select_active_page() + + def __navigator_changed_cb(self, combobox): + iter = self._navigator.get_active_iter() + + link = self._toc_model.get(iter, 1)[0] + self._view.handle_link(link) + + def _toc_select_active_page_foreach(self, model, path, iter, current_page): + link = self._toc_model.get(iter, 1)[0] + + if not hasattr(link, 'get_page'): + #FIXME: This needs to be implemented in epubadapter, not here + filepath = self._view.get_current_file() + if filepath.endswith(link): + self._navigator.set_active_iter(iter) + return True + else: + if current_page == link.get_page(): + self._navigator.set_active_iter(iter) + return True + + return False + + def _toc_select_active_page(self): + iter = self._navigator.get_active_iter() + + current_link = self._toc_model.get(iter, 1)[0] + current_page = self._document.get_page_cache().get_current_page() + + + if not hasattr(current_link, 'get_page'): + filepath = self._view.get_current_file() + if filepath is None or filepath.endswith(current_link): + return + else: + if current_link.get_page() == current_page: + return + + self._navigator.handler_block(self._navigator_changed_handler_id) + self._toc_model.foreach(self._toc_select_active_page_foreach, current_page) + self._navigator.handler_unblock(self._navigator_changed_handler_id) + + def _show_journal_object_picker(self): + """Show the journal object picker to load a document. + + This is for if Anno is launched without a document. + """ + if not self._want_document: + return + chooser = ObjectChooser(_('Choose document'), self, + gtk.DIALOG_MODAL | + gtk.DIALOG_DESTROY_WITH_PARENT, + what_filter=mime.GENERIC_TYPE_TEXT) + try: + result = chooser.run() + if result == gtk.RESPONSE_ACCEPT: + logging.debug('ObjectChooser: %r' % + chooser.get_selected_object()) + jobject = chooser.get_selected_object() + if jobject and jobject.file_path: + self.read_file(jobject.file_path) + properties = jobject.metadata.get_dictionary().copy() + self._url = properties['url'] + finally: + chooser.destroy() + del chooser + + def _now_active_cb(self, widget, pspec): + if self.props.active: + # Now active, start initial suspend timeout + if self._idle_timer > 0: + gobject.source_remove(self._idle_timer) + self._idle_timer = gobject.timeout_add_seconds(15, self._suspend_cb) + self._sleep_inhibit = False + else: + # Now inactive + self._sleep_inhibit = True + + def _focus_in_event_cb(self, widget, event): + """Enable ebook mode idle sleep since Anno has focus.""" + self._sleep_inhibit = False + self._user_action_cb(self) + + def _focus_out_event_cb(self, widget, event): + """Disable ebook mode idle sleep since Anno lost focus.""" + self._sleep_inhibit = True + + def _user_action_cb(self, widget): + """Set a timer for going back to ebook mode idle sleep.""" + if self._idle_timer > 0: + gobject.source_remove(self._idle_timer) + self._idle_timer = gobject.timeout_add_seconds(5, self._suspend_cb) + + def _suspend_cb(self): + """Go into ebook mode idle sleep.""" + # If the machine has been idle for 5 seconds, suspend + self._idle_timer = 0 + if not self._sleep_inhibit and not self.get_shared(): + self._service.set_kernel_suspend() + return False + + def read_file(self, file_path): + """Load a file from the datastore on activity start.""" + _logger.debug('AnnoActivity.read_file: %s', file_path) + extension = os.path.splitext(file_path)[1] + tempfile = os.path.join(self.get_activity_root(), 'instance', + 'tmp%i%s' % (time.time(), extension)) + os.link(file_path, tempfile) + self._tempfile = tempfile + self._load_document('file://' + self._tempfile) + + # FIXME: This should obviously be fixed properly + gobject.timeout_add_seconds(1, self.__view_toolbar_needs_update_size_cb, + None) + + def write_file(self, file_path): + """Write into datastore for Keep. + + The document is saved by hardlinking from the temporary file we + keep around instead of "saving". + + The metadata is updated, including current page, view settings, + search text. + + """ + if self._tempfile is None: + # Workaround for closing Anno with no document loaded + raise NotImplementedError + + try: + self.metadata['Anno_current_page'] = \ + str(self._document.get_page_cache().get_current_page()) + + self.metadata['Anno_zoom'] = str(self._view.props.zoom) + self.metadata['url'] = self._url + + if not self._epub: + if self._view.props.sizing_mode == evince.SIZING_BEST_FIT: + self.metadata['Anno_sizing_mode'] = "best-fit" + elif self._view.props.sizing_mode == evince.SIZING_FREE: + self.metadata['Anno_sizing_mode'] = "free" + elif self._view.props.sizing_mode == evince.SIZING_FIT_WIDTH: + self.metadata['Anno_sizing_mode'] = "fit-width" + else: + _logger.error("Don't know how to save sizing_mode state '%s'" % + self._view.props.sizing_mode) + self.metadata['Anno_sizing_mode'] = "fit-width" + + self.metadata['Anno_search'] = \ + self._edit_toolbar._search_entry.props.text + + except Exception, e: + _logger.error('write_file(): %s', e) + + self.metadata['Anno_search'] = \ + self._edit_toolbar._search_entry.props.text + self.metadata['activity'] = self.get_bundle_id() + self.metadata['url'] = self._url + _logger.debug(str('set url to %s' % self._url)) + + os.link(self._tempfile, file_path) + + if self._close_requested: + _logger.debug("Removing temp file %s because we will close", + self._tempfile) + os.unlink(self._tempfile) + self._tempfile = None + + def can_close(self): + """Prepare to cleanup on closing. + + Called from self.close() + """ + self._close_requested = True + return True + + def _download_result_cb(self, getter, tempfile, suggested_name, tube_id): + if self._download_content_type == 'text/html': + # got an error page instead + self._download_error_cb(getter, 'HTTP Error', tube_id) + return + + del self.unused_download_tubes + + self._tempfile = tempfile + file_path = os.path.join(self.get_activity_root(), 'instance', + '%i' % time.time()) + _logger.debug("Saving file %s to datastore...", file_path) + os.link(tempfile, file_path) + self._jobject.file_path = file_path + datastore.write(self._jobject, transfer_ownership=True) + + _logger.debug("Got document %s (%s) from tube %u", + tempfile, suggested_name, tube_id) + self._load_document("file://%s" % tempfile) + self.save() + + def _download_progress_cb(self, getter, bytes_downloaded, tube_id): + # FIXME: Draw a progress bar + if self._download_content_length > 0: + _logger.debug("Downloaded %u of %u bytes from tube %u...", + bytes_downloaded, self._download_content_length, + tube_id) + else: + _logger.debug("Downloaded %u bytes from tube %u...", + bytes_downloaded, tube_id) + + def _download_error_cb(self, getter, err, tube_id): + _logger.debug("Error getting document from tube %u: %s", + tube_id, err) + self._want_document = True + self._download_content_length = 0 + self._download_content_type = None + gobject.idle_add(self._get_document) + + def _download_document(self, tube_id, path): + # FIXME: should ideally have the CM listen on a Unix socket + # instead of IPv4 (might be more compatible with Rainbow) + chan = self.shared_activity.telepathy_tubes_chan + iface = chan[telepathy.CHANNEL_TYPE_TUBES] + addr = iface.AcceptStreamTube(tube_id, + telepathy.SOCKET_ADDRESS_TYPE_IPV4, + telepathy.SOCKET_ACCESS_CONTROL_LOCALHOST, 0, + utf8_strings=True) + _logger.debug('Accepted stream tube: listening address is %r', addr) + # SOCKET_ADDRESS_TYPE_IPV4 is defined to have addresses of type '(sq)' + assert isinstance(addr, dbus.Struct) + assert len(addr) == 2 + assert isinstance(addr[0], str) + assert isinstance(addr[1], (int, long)) + assert addr[1] > 0 and addr[1] < 65536 + port = int(addr[1]) + + getter = AnnoURLDownloader("http://%s:%d/document" + % (addr[0], port)) + getter.connect("finished", self._download_result_cb, tube_id) + getter.connect("progress", self._download_progress_cb, tube_id) + getter.connect("error", self._download_error_cb, tube_id) + _logger.debug("Starting download to %s...", path) + getter.start(path) + self._download_content_length = getter.get_content_length() + self._download_content_type = getter.get_content_type() + return False + + def _get_document(self): + if not self._want_document: + return False + + # Assign a file path to download if one doesn't exist yet + if not self._jobject.file_path: + path = os.path.join(self.get_activity_root(), 'instance', + 'tmp%i' % time.time()) + else: + path = self._jobject.file_path + + # Pick an arbitrary tube we can try to download the document from + try: + tube_id = self.unused_download_tubes.pop() + except (ValueError, KeyError), e: + _logger.debug('No tubes to get the document from right now: %s', + e) + return False + + # Avoid trying to download the document multiple times at once + self._want_document = False + gobject.idle_add(self._download_document, tube_id, path) + return False + + def _joined_cb(self, also_self): + """Callback for when a shared activity is joined. + + Get the shared document from another participant. + """ + self.watch_for_tubes() + gobject.idle_add(self._get_document) + + def _setup_epub_viewer(self): + self._view = epubadapter.View() + self._view.set_screen_dpi(_get_screen_dpi()) + self._view.connect('notify::has-selection', + self._view_notify_has_selection_cb) + + self._hbox.pack_start(self._view, expand=True, fill=True) + self._view.show_all() + + def _setup_evince_viewer(self): + self._view = evince.View() + self._view.set_screen_dpi(_get_screen_dpi()) + self._view.connect('notify::has-selection', + self._view_notify_has_selection_cb) + + self._scrolled = gtk.ScrolledWindow() + self._scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self._scrolled.props.shadow_type = gtk.SHADOW_NONE + + self._scrolled.add(self._view) + self._view.show() + + self._hbox.pack_start(self._scrolled, expand=True, fill=True) + self._scrolled.show() + + + def _load_document(self, filepath): + """Load the specified document and set up the UI. + + filepath -- string starting with file:// + + """ + _logger.debug('_load_document filepath: %s ' % filepath ) + mimetype = mime.get_for_file(filepath) + if mimetype == 'application/epub+zip': + if not _EPUB_SUPPORT: + self.close() + self._epub = True + self._setup_epub_viewer() + self._document = epubadapter.EpubDocument(self._view, filepath.replace('file://', '')) + else: + self._setup_evince_viewer() + #get the url from the object in the journal that matches this file path + + try: + self._document = evince.factory_get_document(filepath) + except GError, e: + _logger.error('Can not load document: %s', e) + return + + self._view_toolbar.set_view(self._view) + self._edit_toolbar.set_view(self._view) + + self._want_document = False + self._view.set_document(self._document) + self._edit_toolbar.set_document(self._document) + self._topbar.set_document(self._document) + + filehash = get_md5(filepath) + self._sidebar.set_bookmarkmanager(filehash) + self._sidebar.set_annotationmanager(filehash, mimetype) + + self._update_nav_buttons() + self._update_toc() + + page_cache = self._document.get_page_cache() + page_cache.connect('page-changed', self.__page_changed_cb) + + if not self.metadata['title_set_by_user'] == '1': + info = self._document.get_info() + if info and info.title: + self.metadata['title'] = info.title + + if not self._epub: + sizing_mode = self.metadata.get('Anno_sizing_mode', 'fit-width') + _logger.debug('Found sizing mode: %s', sizing_mode) + if sizing_mode == "best-fit": + self._view.props.sizing_mode = evince.SIZING_BEST_FIT + if hasattr(self._view, 'update_view_size'): + self._view.update_view_size(self._scrolled) + elif sizing_mode == "free": + self._view.props.sizing_mode = evince.SIZING_FREE + self._view.props.zoom = float(self.metadata.get('Anno_zoom', '1.0')) + _logger.debug('Set zoom to %f', self._view.props.zoom) + elif sizing_mode == "fit-width": + self._view.props.sizing_mode = evince.SIZING_FIT_WIDTH + if hasattr(self._view, 'update_view_size'): + self._view.update_view_size(self._scrolled) + else: + # this may happen when we get a document from a buddy with a later + # version of Anno, for example. + _logger.warning("Unknown sizing_mode state '%s'", sizing_mode) + if self.metadata.get('Anno_zoom', None) is not None: + self._view.props.zoom = float(self.metadata['Anno_zoom']) + + self._view_toolbar._update_zoom_buttons() + + self._edit_toolbar._search_entry.props.text = \ + self.metadata.get('Anno_search', '') + + current_page = int(self.metadata.get('Anno_current_page', '0')) + _logger.debug('Setting page to: %d', current_page) + self._document.get_page_cache().set_current_page(current_page) + + # We've got the document, so if we're a shared activity, offer it + try: + if self.get_shared(): + self.watch_for_tubes() + self._share_document() + except Exception, e: + _logger.debug('Sharing failed: %s', e) + + def _share_document(self): + """Share the document.""" + # FIXME: should ideally have the fileserver listen on a Unix socket + # instead of IPv4 (might be more compatible with Rainbow) + + _logger.debug('Starting HTTP server on port %d', self.port) + self._fileserver = AnnoHTTPServer(("", self.port), + self._tempfile) + + # Make a tube for it + chan = self.shared_activity.telepathy_tubes_chan + iface = chan[telepathy.CHANNEL_TYPE_TUBES] + self._fileserver_tube_id = iface.OfferStreamTube(READ_STREAM_SERVICE, + {}, + telepathy.SOCKET_ADDRESS_TYPE_IPV4, + ('127.0.0.1', dbus.UInt16(self.port)), + telepathy.SOCKET_ACCESS_CONTROL_LOCALHOST, 0) + + def watch_for_tubes(self): + """Watch for new tubes.""" + tubes_chan = self.shared_activity.telepathy_tubes_chan + + tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal('NewTube', + self._new_tube_cb) + tubes_chan[telepathy.CHANNEL_TYPE_TUBES].ListTubes( + reply_handler=self._list_tubes_reply_cb, + error_handler=self._list_tubes_error_cb) + + def _new_tube_cb(self, tube_id, initiator, tube_type, service, params, + state): + """Callback when a new tube becomes available.""" + _logger.debug('New tube: ID=%d initator=%d type=%d service=%s ' + 'params=%r state=%d', tube_id, initiator, tube_type, + service, params, state) + if self._document is None and service == READ_STREAM_SERVICE: + _logger.debug('I could download from that tube') + self.unused_download_tubes.add(tube_id) + # if no download is in progress, let's fetch the document + if self._want_document: + gobject.idle_add(self._get_document) + + def _list_tubes_reply_cb(self, tubes): + """Callback when new tubes are available.""" + for tube_info in tubes: + self._new_tube_cb(*tube_info) + + def _list_tubes_error_cb(self, e): + """Handle ListTubes error by logging.""" + _logger.error('ListTubes() failed: %s', e) + + def _shared_cb(self, activityid): + """Callback when activity shared. + + Set up to share the document. + + """ + # We initiated this activity and have now shared it, so by + # definition we have the file. + _logger.debug('Activity became shared') + self.watch_for_tubes() + self._share_document() + + def _view_notify_has_selection_cb(self, view, pspec): + self._edit_toolbar.copy.set_sensitive(self._view.props.has_selection) + + def _edit_toolbar_copy_cb(self, button): + self._view.copy() + + def _key_press_event_cb(self, widget, event): + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'c' and event.state & gtk.gdk.CONTROL_MASK: + self._view.copy() + return True + elif keyname == 'KP_Home': + # FIXME: refactor later to self.zoom_in() + self._view_toolbar.zoom_in() + return True + elif keyname == 'KP_End': + self._view_toolbar.zoom_out() + return True + else: + return False + + def _key_release_event_cb(self, widget, event): + #keyname = gtk.gdk.keyval_name(event.keyval) + #_logger.debug("Keyname Release: %s, time: %s", keyname, event.time) + return False + + def _window_state_event_cb(self, window, event): + if not (event.changed_mask & gtk.gdk.WINDOW_STATE_FULLSCREEN): + return False + + if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN: + self._topbar.show_all() + else: + self._topbar.hide() + + def __view_toolbar_needs_update_size_cb(self, view_toolbar): + if hasattr(self._view, 'update_view_size'): + self._view.update_view_size(self._scrolled) + else: + return False # No need to run this again and again + + def __view_toolbar_go_fullscreen_cb(self, view_toolbar): + self.fullscreen() diff --git a/annobookmark.py b/annobookmark.py new file mode 100644 index 0000000..b1d7468 --- /dev/null +++ b/annobookmark.py @@ -0,0 +1,181 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import cjson +import logging + +_logger = logging.getLogger('anno-activity') + + +class Bookmark: + def __init__(self, data): + self.md5 = data[0] + self.page_no = data[1] + self.content = data[2] + self.timestamp = data[3] + self.nick = data[4] + self.color = data[5] + self.local = data[6] + + def belongstopage(self, page_no): + return self.page_no == page_no + + def is_local(self): + return bool(self.local) + + def get_note_title(self): + if self.content == '' or self.content is None: + return '' + + note = cjson.decode(self.content) + return note['title'] + + def get_note_body(self): + if self.content == '' or self.content is None: + return '' + + note = cjson.decode(self.content) + return note['body'] + + + + +class AnnoBookmark: + def __init__(self, data): + self.id = data[0] + self.md5 = data[1] + self.page = data[2] + self.title = data[3] + self.content = data[4] + self.bodyurl = data[5] + self.context = data[6] + self.created = data[7] + self.modified = data[8] + self.creator = data[9] + self.annotates = data[10] + self.rdf = data[11] + self.color = data[12] + self.local = data[13] + self.mimetype = data[14] + self.uuid = data[15] + self.annotationurl = data[16] + self.bodysvg = data[17] + if ( ( self.uuid == None ) or ( len( self.uuid ) == 0 ) ) and ( self.md5 != None ) and ( self.id != None ): + self.uuid = "urn:sugaruuid:" + self.creator + "-" + self.md5 + "-" + str(self.id) + _logger.debug('annobookmark annotates is %s' % self.annotates) + + + def __str__(self): + r = str( "A bookmark: id: %s \nuuid: %s" % ( str( self.id ), self.uuid ) ) + r += str( "\nmd5: %s" % str( self.md5 ) ) + r += str( "\npage: %d\ntitle: %s" % ( self.page, self.title ) ) + r += str( "\ncontent: %s" % self.content ) + r += str( "\nbodyurl: %s \nannotationurl: %s" % ( self.bodyurl, self.annotationurl ) ) + r += str( "\ncontext: %s \ncreated: %s" % ( self.context, str( self.created ) ) ) + r += str( "\nmodified: %s \ncreator: %s" % ( str( self.modified ), self.creator ) ) + r += str( "\nannotates: %s \nmimetype: %s" % ( self.annotates, self.mimetype ) ) + r += str( "\nrdf: %s" % self.rdf ) + r += str( "\ncolor: %s \nlocal: %s" % ( str( self.color ), str( self.local ) ) ) + r += str( "\nbodysvg: %s" % self.bodysvg ) + return r + + + def belongstopage(self, page): + return self.page == page + + def is_local(self): + return bool(self.local) + + def set_note_title(self, note_title): + self.title = note_title + + def get_note_title(self): + if self.title == '' or self.title is None: + return '' + return self.title + + def set_note_body(self, note_content): + self.content = note_content + + def get_note_body(self): + if self.content == '' or self.content is None: + return '' + return self.content + + def set_bodysvg(self, bodysvg): + self.bodysvg = bodysvg + + + def get_bodysvg(self): + return self.bodysvg + + def get_id(self): + return self.id + + def set_modified(self, modified): + self.modified = modified + + def get_modified(self): + return self.modified + + def get_page(self): + return self.page + + def get_bodyurl(self): + return self.bodyurl + + def set_bodyurl(self, url): + self.bodyurl = url + + def get_annotationurl(self): + return self.annotationurl + + def set_annotationurl(self, url): + self.annotationurl = url + + def get_context(self): + return self.context + + def get_created(self): + return self.created + + def get_creator(self): + return self.creator + + def get_target(self): + return self.get_annotates() + + def get_annotates(self): + return self.annotates + + def get_rdf(self): + return self.rdf + + def set_rdf(self, rdf): + self.rdf = rdf + + def get_color(self): + return self.color + + def get_mimetype(self): + return self.mimetype + + def get_filehash(self): + return self.md5 + + def get_uuid(self): + return self.uuid diff --git a/epubadapter.py b/epubadapter.py new file mode 100644 index 0000000..cfb50d2 --- /dev/null +++ b/epubadapter.py @@ -0,0 +1,64 @@ +import gobject +import logging + +import epubview + +_logger = logging.getLogger('anno-activity') + +class View(epubview.EpubView): + def __init__(self): + epubview.EpubView.__init__(self) + + def _try_load_page(self, n): + if self._ready: + self._load_page(n) + return False + else: + return True + + def set_screen_dpi(self, dpi): + return + + def find_set_highlight_search(self, set_highlight_search): + return + + def set_current_page(self, n): + # When the book is being loaded, calling this does not help + # In such a situation, we go into a loop and try to load the + # supplied page when the book has loaded completely + n += 1 + if self._ready: + self._load_page(n) + else: + gobject.timeout_add(200, self._try_load_page, n) + + def get_current_page(self): + return int(self._loaded_page - 1) + + def find_changed(self, job, page = None): + self._find_changed(job) + + def handle_link(self, link): + self._load_file(link) + + +class EpubDocument(epubview.Epub): + def __init__(self, view, docpath): + epubview.Epub.__init__(self, docpath) + self._page_cache = view + + def get_page_cache(self): + return self._page_cache + + def get_n_pages(self): + return int(self._page_cache.get_pagecount()) + + def has_document_links(self): + return True + + def get_links_model(self): + return self.get_toc_model() + +class JobFind(epubview.JobFind): + def __init__(self, document, start_page, n_pages, text, case_sensitive=False): + epubview.JobFind.__init__(self, document, start_page, n_pages, text, case_sensitive=False) diff --git a/epubview/__init__.py b/epubview/__init__.py new file mode 100644 index 0000000..81a3175 --- /dev/null +++ b/epubview/__init__.py @@ -0,0 +1,24 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gobject + +gobject.threads_init() + +from epub import _Epub as Epub +from epubview import _View as EpubView +from jobs import _JobFind as JobFind
\ No newline at end of file diff --git a/epubview/__init__.pyc b/epubview/__init__.pyc Binary files differnew file mode 100644 index 0000000..2c23dd5 --- /dev/null +++ b/epubview/__init__.pyc diff --git a/epubview/epub.py b/epubview/epub.py new file mode 100644 index 0000000..71267aa --- /dev/null +++ b/epubview/epub.py @@ -0,0 +1,152 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import zipfile +import tempfile +import os, os.path +from lxml import etree +import shutil + +import navmap, epubinfo + + +class _Epub(object): + def __init__(self, filepath): + self._filepath = filepath + self._zobject = None + self._opfpath = None + self._ncxpath = None + self._basepath = None + self._tempdir = tempfile.mkdtemp() + + if not self._verify(): + print 'Warning: This does not seem to be a valid epub file' + + self._get_opf() + self._get_ncx() + + ncxfile = self._zobject.open(self._ncxpath) + opffile = self._zobject.open(self._opfpath) + self._navmap = navmap.NavMap(opffile, ncxfile, self._basepath) + + opffile = self._zobject.open(self._opfpath) + self._info = epubinfo.EpubInfo(opffile) + + self._unzip() + + def _unzip(self): + #self._zobject.extractall(path = self._tempdir) # This is broken upto python 2.7 + orig_cwd = os.getcwd() + os.chdir(self._tempdir) + for name in self._zobject.namelist(): + if name.startswith(os.path.sep): # Some weird zip file entries start with a slash, and we don't want to write to the root directory + name = name[1:] + if name.endswith(os.path.sep) or name.endswith('\\'): + os.makedirs(name) + else: + self._zobject.extract(name) + os.chdir(orig_cwd) + + + def _get_opf(self): + containerfile = self._zobject.open('META-INF/container.xml') + + tree = etree.parse(containerfile) + root = tree.getroot() + + for element in root.iterfind('.//{urn:oasis:names:tc:opendocument:xmlns:container}rootfile'): + if element.get('media-type') == 'application/oebps-package+xml': + self._opfpath = element.get('full-path') + + if self._opfpath.rpartition('/')[0]: + self._basepath = self._opfpath.rpartition('/')[0] + '/' + else: + self._basepath = '' + + containerfile.close() + + + def _get_ncx(self): + opffile = self._zobject.open(self._opfpath) + + tree = etree.parse(opffile) + root = tree.getroot() + + spine = root.find('.//{http://www.idpf.org/2007/opf}spine') + tocid = spine.get('toc') + + for element in root.iterfind('.//{http://www.idpf.org/2007/opf}item'): + if element.get('id') == tocid: + self._ncxpath = self._basepath + element.get('href') + + opffile.close() + + def _verify(self): + ''' + Method to crudely check to verify that what we + are dealing with is a epub file or not + ''' + if not os.path.exists(self._filepath): + return False + + self._zobject = zipfile.ZipFile(self._filepath) + + if not 'mimetype' in self._zobject.namelist(): + return False + + mtypefile = self._zobject.open('mimetype') + mimetype = mtypefile.readline() + + if not mimetype.startswith('application/epub+zip'): # Some files seem to have trailing characters + return False + + return True + + def get_toc_model(self): + ''' + Returns a GtkTreeModel representation of the + Epub table of contents + ''' + return self._navmap.get_gtktreestore() + + def get_flattoc(self): + ''' + Returns a flat (linear) list of files to be + rendered. + ''' + return self._navmap.get_flattoc() + + def get_basedir(self): + ''' + Returns the base directory where the contents of the + epub has been unzipped + ''' + return self._tempdir + + def get_info(self): + ''' + Returns a EpubInfo object for the open Epub file + ''' + return self._info + + def close(self): + ''' + Cleans up (closes open zip files and deletes uncompressed content of Epub. + Please call this when a file is being closed or during application exit. + ''' + self._zobject.close() + shutil.rmtree(self._tempdir) diff --git a/epubview/epub.pyc b/epubview/epub.pyc Binary files differnew file mode 100644 index 0000000..ad0d223 --- /dev/null +++ b/epubview/epub.pyc diff --git a/epubview/epubinfo.py b/epubview/epubinfo.py new file mode 100644 index 0000000..d25dfc2 --- /dev/null +++ b/epubview/epubinfo.py @@ -0,0 +1,90 @@ +import os +from lxml import etree + + +class EpubInfo(): #TODO: Cover the entire DC range + def __init__(self, opffile): + self._tree = etree.parse(opffile) + self._root = self._tree.getroot() + self._e_metadata = self._root.find('{http://www.idpf.org/2007/opf}metadata') + + self.title = self._get_title() + self.creator = self._get_creator() + self.date = self._get_date() + self.subject = self._get_subject() + self.source = self._get_source() + self.rights = self._get_rights() + self.identifier = self._get_identifier() + self.language = self._get_language() + + + def _get_data(self, tagname): + element = self._e_metadata.find(tagname) + return element.text + + def _get_title(self): + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}title') + except AttributeError: + return None + + return ret + + def _get_creator(self): + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}creator') + except AttributeError: + return None + return ret + + def _get_date(self): + #TODO: iter + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}date') + except AttributeError: + return None + + return ret + + def _get_source(self): + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}source') + except AttributeError: + return None + + return ret + + def _get_rights(self): + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}rights') + except AttributeError: + return None + + return ret + + def _get_identifier(self): + #TODO: iter + element = self._e_metadata.find('.//{http://purl.org/dc/elements/1.1/}identifier') + + if element is not None: + return {'id':element.get('id'), 'value':element.text} + else: + return None + + def _get_language(self): + try: + ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}language') + except AttributeError: + return None + + return ret + + def _get_subject(self): + try: + subjectlist = [] + for element in self._e_metadata.iterfind('.//{http://purl.org/dc/elements/1.1/}subject'): + subjectlist.append(element.text) + except AttributeError: + return None + + return subjectlist
\ No newline at end of file diff --git a/epubview/epubinfo.pyc b/epubview/epubinfo.pyc Binary files differnew file mode 100644 index 0000000..fdf1ad8 --- /dev/null +++ b/epubview/epubinfo.pyc diff --git a/epubview/epubview.py b/epubview/epubview.py new file mode 100644 index 0000000..595eb20 --- /dev/null +++ b/epubview/epubview.py @@ -0,0 +1,563 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk, gtk.gdk +import gobject +import widgets + +import os.path +import math +import shutil + +from epub import _Epub +from jobs import _JobPaginator as _Paginator + + +LOADING_HTML = ''' +<div style="width:100%;height:100%;text-align:center;padding-top:50%;"> + <h1>Loading...</h1> +</div> +''' + +class _View(gtk.HBox): + __gproperties__ = { + 'has-selection' : (gobject.TYPE_BOOLEAN, 'whether has selection', + 'whether the widget has selection or not', + 0, gobject.PARAM_READABLE), + 'zoom' : (gobject.TYPE_FLOAT, 'the zoom level', + 'the zoom level of the widget', + 0.5, 4.0, 1.0, gobject.PARAM_READWRITE) + } + __gsignals__ = { + 'page-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])) + } + def __init__(self): + gobject.threads_init() + gtk.HBox.__init__(self) + + self.connect("destroy", self._destroy_cb) + + self._ready = False + self._paginator = None + self._loaded_page = -1 + #self._old_scrollval = -1 + self._loaded_filename = None + self._pagecount = -1 + self.__going_fwd = True + self.__going_back = False + self.__page_changed = False + self.has_selection = False + self.zoom = 1.0 + self._epub = None + self._findjob = None + self.__in_search = False + self.__search_fwd = True + + self._sw = gtk.ScrolledWindow() + self._view = widgets._WebView() + self._view.load_string(LOADING_HTML, 'text/html', 'utf-8', '/') + settings = self._view.get_settings() + settings.props.default_font_family = 'DejaVu LGC Serif' + settings.props.enable_plugins = False + settings.props.default_encoding = 'utf-8' + self._view.connect('load-finished', self._view_load_finished_cb) + self._view.connect('scroll-event', self._view_scroll_event_cb) + self._view.connect('key-press-event', self._view_keypress_event_cb) + self._view.connect('button-release-event', self._view_buttonrelease_event_cb) + self._view.connect('selection-changed', self._view_selection_changed_cb) + self._view.connect_after('populate-popup', self._view_populate_popup_cb) + + self._sw.add(self._view) + self._sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) + self._v_vscrollbar = self._sw.get_vscrollbar() + self._v_scrollbar_value_changed_cb_id = self._v_vscrollbar.connect('value-changed', \ + self._v_scrollbar_value_changed_cb) + self._scrollbar = gtk.VScrollbar() + self._scrollbar.set_update_policy(gtk.UPDATE_DISCONTINUOUS) + self._scrollbar_change_value_cb_id = self._scrollbar.connect('change-value', \ + self._scrollbar_change_value_cb) + self.pack_start(self._sw, expand = True, fill = True) + self.pack_start(self._scrollbar, expand = False, fill = False) + + self._view.set_flags(gtk.CAN_DEFAULT|gtk.CAN_FOCUS) + + def set_document(self, epubdocumentinstance): + ''' + Sets document (should be a Epub instance) + ''' + self._epub = epubdocumentinstance + gobject.idle_add(self._paginate) + + def do_get_property(self, property): + if property.name == 'has-selection': + return self.has_selection + elif property.name == 'zoom': + return self.zoom + else: + raise AttributeError, 'unknown property %s' % property.name + + def do_set_property(self, property, value): + if property.name == 'zoom': + self.__set_zoom(value) + else: + raise AttributeError, 'unknown property %s' % property.name + + def get_has_selection(self): + ''' + Returns True if any part of the content is selected + ''' + return self.get_property('has-selection') + + def get_zoom(self): + ''' + Returns the current zoom level + ''' + return self.get_property('zoom') + + def set_zoom(self, value): + ''' + Sets the current zoom level + ''' + self.set_property('zoom', value) + + def zoom_in(self): + ''' + Zooms in (increases zoom level by 0.1) + ''' + if self.can_zoom_in(): + self.set_zoom(self.get_zoom() + 0.1) + return True + else: + return False + + def zoom_out(self): + ''' + Zooms out (decreases zoom level by 0.1) + ''' + if self.can_zoom_out(): + self.set_zoom(self.get_zoom() - 0.1) + return True + else: + return False + + def can_zoom_in(self): + ''' + Returns True if it is possible to zoom in further + ''' + if self.zoom < 4: + return True + else: + return False + + def can_zoom_out(self): + ''' + Returns True if it is possible to zoom out further + ''' + if self.zoom > 0.5: + return True + else: + return False + + def get_current_page(self): + ''' + Returns the currently loaded page + ''' + return self._loaded_page + + def get_current_file(self): + ''' + Returns the currently loaded XML file + ''' + #return self._loaded_filename + if self._paginator: + return self._paginator.get_file_for_pageno(self._loaded_page) + else: + return None + + def get_pagecount(self): + ''' + Returns the pagecount of the loaded file + ''' + return self._pagecount + + def set_current_page(self, n): + ''' + Loads page number n + ''' + if n < 1 or n > self._pagecount: + return False + self._load_page(n) + return True + + def next_page(self): + ''' + Loads next page if possible + Returns True if transition to next page is possible and done + ''' + if self._loaded_page == self._pagecount: + return False + self._load_next_page() + return True + + def previous_page(self): + ''' + Loads previous page if possible + Returns True if transition to previous page is possible and done + ''' + if self._loaded_page == 1: + return False + self._load_prev_page() + return True + + def scroll(self, scrolltype, horizontal): + ''' + Scrolls through the pages. + Scrolling is horizontal if horizontal is set to True + Valid scrolltypes are: gtk.SCROLL_PAGE_BACKWARD and gtk.SCROLL_PAGE_FORWARD + ''' + if scrolltype == gtk.SCROLL_PAGE_BACKWARD: + self.__going_back = True + self.__going_fwd = False + if not self._do_page_transition(): + self._view.move_cursor(gtk.MOVEMENT_PAGES, -1) + elif scrolltype == gtk.SCROLL_PAGE_FORWARD: + self.__going_back = False + self.__going_fwd = True + if not self._do_page_transition(): + self._view.move_cursor(gtk.MOVEMENT_PAGES, 1) + else: + print ('Got unsupported scrolltype %s' % str(scrolltype)) + + def copy(self): + ''' + Copies the current selection to clipboard. + ''' + self._view.copy_clipboard() + + def find_next(self): + ''' + Highlights the next matching item for current search + ''' + self._view.grab_focus() + self._view.grab_default() + + if self._view.search_text(self._findjob.get_search_text(), \ + self._findjob.get_case_sensitive(), True, False): + return + else: + path = os.path.join(self._epub.get_basedir(), self._findjob.get_next_file()) + self.__in_search = True + self.__search_fwd = True + self._load_file(path) + + def find_previous(self): + ''' + Highlights the previous matching item for current search + ''' + self._view.grab_focus() + self._view.grab_default() + + if self._view.search_text(self._findjob.get_search_text(), \ + self._findjob.get_case_sensitive(), False, False): + return + else: + path = os.path.join(self._epub.get_basedir(), self._findjob.get_prev_file()) + self.__in_search = True + self.__search_fwd = False + self._load_file(path) + + def _find_changed(self, job): + self._view.grab_focus() + self._view.grab_default() + self._findjob = job + #self._view.search_text(self._findjob.get_search_text(), \ + # self._findjob.get_case_sensitive(), True, False) + self.find_next() + + def __set_zoom(self, value): + self._view.set_zoom_level(value) + self.zoom = value + + def __set_has_selection(self, value): + if value != self.has_selection: + self.has_selection = value + self.notify('has-selection') + + def _view_populate_popup_cb(self, view, menu): + menu.destroy() #HACK + return + + def _view_selection_changed_cb(self, view): + # FIXME: This does not seem to be implemented in + # webkitgtk yet + print view.has_selection() + + def _view_buttonrelease_event_cb(self, view, event): + # Ugly hack + self.__set_has_selection(view.can_copy_clipboard() \ + | view.can_cut_clipboard()) + + def _view_keypress_event_cb(self, view, event): + name = gtk.gdk.keyval_name(event.keyval) + if name == 'Page_Down' or name == 'Down': + self.__going_back = False + self.__going_fwd = True + elif name == 'Page_Up' or name == 'Up': + self.__going_back = True + self.__going_fwd = False + + self._do_page_transition() + + def _view_scroll_event_cb(self, view, event): + if event.direction == gtk.gdk.SCROLL_DOWN: + self.__going_back = False + self.__going_fwd = True + elif event.direction == gtk.gdk.SCROLL_UP: + self.__going_back = True + self.__going_fwd = False + + self._do_page_transition() + + def _do_page_transition(self): + if self.__going_fwd: + if self._v_vscrollbar.get_value() >= \ + self._v_vscrollbar.props.adjustment.props.upper - \ + self._v_vscrollbar.props.adjustment.props.page_size: + self._load_next_file() + return True + elif self.__going_back: + if self._v_vscrollbar.get_value() == self._v_vscrollbar.props.adjustment.props.lower: + self._load_prev_file() + return True + + return False + + def _view_load_finished_cb(self, v, frame): + + # Normally the line below would not be required - ugly workaround for + # possible Webkit bug. See : https://bugs.launchpad.net/bugs/483231 + self._sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) + + filename = self._view.props.uri.replace('file://', '') + if os.path.exists(filename.replace('xhtml', 'xml')): + filename = filename.replace('xhtml', 'xml') # Hack for making javascript work + + filename = filename.split('#')[0] # Get rid of anchors + + if self._loaded_page < 1 or filename == None: + return False + + self._loaded_filename = filename + + remfactor = self._paginator.get_remfactor_for_file(filename) + pages = self._paginator.get_pagecount_for_file(filename) + extra = int(math.ceil(remfactor * self._view.get_page_height()/(pages-remfactor))) + if extra > 0: + self._view.add_bottom_padding(extra) + + if self.__in_search: + self._view.search_text(self._findjob.get_search_text(), \ + self._findjob.get_case_sensitive(), \ + self.__search_fwd, False) + self.__in_search = False + else: + if self.__going_back: + # We need to scroll to the last page + self._scroll_page_end() + else: + self._scroll_page() + + base_pageno = self._paginator.get_base_pageno_for_file(filename) + scrollval = self._v_vscrollbar.get_value() + scroll_upper = self._v_vscrollbar.props.adjustment.props.upper + + if scroll_upper == 0: # This is a one page file + pageno = base_pageno + else: + offset = (scrollval/scroll_upper) * self._paginator.get_pagecount_for_file(filename) + pageno = math.floor(base_pageno + offset) + + if pageno != self._loaded_page: + self._on_page_changed(int(pageno)) + + + def _scroll_page_end(self): + v_upper = self._v_vscrollbar.props.adjustment.props.upper + v_page_size = self._v_vscrollbar.props.adjustment.props.page_size + self._v_vscrollbar.set_value(v_upper) + + def _scroll_page(self): + pageno = self._loaded_page + + v_upper = self._v_vscrollbar.props.adjustment.props.upper + v_page_size = self._v_vscrollbar.props.adjustment.props.page_size + + scrollfactor = self._paginator.get_scrollfactor_pos_for_pageno(pageno) + self._v_vscrollbar.set_value((v_upper - v_page_size) * scrollfactor) + + def _paginate(self): + filelist = [] + for i in self._epub._navmap.get_flattoc(): + filelist.append(os.path.join(self._epub._tempdir, i)) + + self._paginator = _Paginator(filelist) + self._paginator.connect('paginated', self._paginated_cb) + + def _load_next_page(self): + self._load_page(self._loaded_page + 1) + + def _load_prev_page(self): + self._load_page(self._loaded_page - 1) + + def _v_scrollbar_value_changed_cb(self, scrollbar): + if self._loaded_page < 1: + return + scrollval = scrollbar.get_value() + scroll_upper = self._v_vscrollbar.props.adjustment.props.upper + scroll_page_size = self._v_vscrollbar.props.adjustment.props.page_size + + if self.__going_fwd == True and not self._loaded_page == self._pagecount: + if self._paginator.get_file_for_pageno(self._loaded_page) != \ + self._paginator.get_file_for_pageno(self._loaded_page + 1): + return # We don't need this if the next page is in another file + + scrollfactor_next = self._paginator.get_scrollfactor_pos_for_pageno(self._loaded_page + 1) + if scrollval > 0: + scrollfactor = scrollval/(scroll_upper - scroll_page_size) + else: + scrollfactor = 0 + if scrollfactor >= scrollfactor_next: + self._on_page_changed(self._loaded_page + 1) + elif self.__going_back == True and self._loaded_page > 1: + if self._paginator.get_file_for_pageno(self._loaded_page) != \ + self._paginator.get_file_for_pageno(self._loaded_page - 1): + return + + scrollfactor_cur = self._paginator.get_scrollfactor_pos_for_pageno(self._loaded_page) + if scrollval > 0: + scrollfactor = scrollval/(scroll_upper - scroll_page_size) + else: + scrollfactor = 0 + + if scrollfactor <= scrollfactor_cur: + self._on_page_changed(self._loaded_page - 1) + + def _on_page_changed(self, pageno): + self.__page_changed = True + self._loaded_page = pageno + self._scrollbar.handler_block(self._scrollbar_change_value_cb_id) + self._scrollbar.set_value(pageno) + self._scrollbar.handler_unblock(self._scrollbar_change_value_cb_id) + self.emit('page-changed') + + def _load_page(self, pageno): + if pageno > self._pagecount or pageno < 1: + #TODO: Cause an exception + return + + self._on_page_changed(pageno) + filename = self._paginator.get_file_for_pageno(pageno) + if filename != self._loaded_filename: + #self._loaded_filename = filename + if filename.endswith('xml'): + dest = filename.replace('xml', 'xhtml') + shutil.copy(filename.replace('file://', ''), dest.replace('file://', '')) + self._view.open(dest) + else: + self._view.open(filename) + else: + self._scroll_page() + + def _load_next_file(self): + if self._loaded_page == self._pagecount: + return + cur_file = self._paginator.get_file_for_pageno(self._loaded_page) + pageno = self._loaded_page + while pageno < self._paginator.get_total_pagecount(): + pageno += 1 + if self._paginator.get_file_for_pageno(pageno) != cur_file: + break + + self._load_page(pageno) + + def _load_file(self, path): + #TODO: This is a bit suboptimal - fix it + for pageno in range(1, self.get_pagecount()): + filepath = self._paginator.get_file_for_pageno(pageno) + if filepath.endswith(path): + self._load_page(pageno) + break + + def _load_prev_file(self): + if self._loaded_page == 1: + return + cur_file = self._paginator.get_file_for_pageno(self._loaded_page) + pageno = self._loaded_page + while pageno > 1: + pageno -= 1 + if self._paginator.get_file_for_pageno(pageno) != cur_file: + break + + self._load_page(pageno) + + def _scrollbar_change_value_cb(self, range, scrolltype, value): + if scrolltype == gtk.SCROLL_STEP_FORWARD: + self.__going_fwd = True + self.__going_back = False + if not self._do_page_transition(): + self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, 1) + elif scrolltype == gtk.SCROLL_STEP_BACKWARD: + self.__going_fwd = False + self.__going_back = True + if not self._do_page_transition(): + self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, -1) + elif scrolltype == gtk.SCROLL_JUMP or \ + scrolltype == gtk.SCROLL_PAGE_FORWARD or \ + scrolltype == gtk.SCROLL_PAGE_BACKWARD: + if value > self._scrollbar.props.adjustment.props.upper: + self._load_page(self._pagecount) + else: + self._load_page(round(value)) + else: + print 'Warning: unknown scrolltype %s with value %f' % (str(scrolltype), value) + + self._scrollbar.set_value(self._loaded_page) #FIXME: This should not be needed here + + if self.__page_changed == True: + self.__page_changed = False + return False + else: + return True + + def _paginated_cb(self, object): + self._ready = True + + self._pagecount = self._paginator.get_total_pagecount() + self._scrollbar.set_range(1.0, self._pagecount - 1.0) + self._scrollbar.set_increments(1.0, 1.0) + self._view.grab_focus() + self._view.grab_default() + if self._loaded_page < 1: + self._load_page(1) + + + + def _destroy_cb(self, widget): + self._epub.close() + diff --git a/epubview/epubview.pyc b/epubview/epubview.pyc Binary files differnew file mode 100644 index 0000000..abbada9 --- /dev/null +++ b/epubview/epubview.pyc diff --git a/epubview/jobs.py b/epubview/jobs.py new file mode 100644 index 0000000..19c8434 --- /dev/null +++ b/epubview/jobs.py @@ -0,0 +1,296 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +import gobject +import gtk +import widgets +import cairo + +import math +import os.path +import BeautifulSoup + +import epub + +import threading + +PAGE_WIDTH = 135 +PAGE_HEIGHT = 216 + +def _pixel_to_mm(pixel, dpi): + inches = pixel/dpi + return int(inches/0.03937) + +def _mm_to_pixel(mm, dpi): + inches = mm * 0.03937 + return int(inches * dpi) + + + +class SearchThread(threading.Thread): + def __init__(self, obj): + threading.Thread.__init__ (self) + self.obj = obj + self.stopthread = threading.Event() + + def _start_search(self): + for entry in self.obj.flattoc: + if self.stopthread.isSet(): + break + filepath = os.path.join(self.obj._document.get_basedir(), entry) + f = open(filepath) + if self._searchfile(f): + self.obj._matchfilelist.append(entry) + f.close() + + gtk.gdk.threads_enter() + self.obj._finished = True + self.obj.emit('updated') + gtk.gdk.threads_leave() + + return False + + def _searchfile(self, fileobj): + soup = BeautifulSoup.BeautifulSoup(fileobj) + body = soup.find('body') + tags = body.findChildren(True) + for tag in tags: + if not tag.string is None: + if tag.string.find(self.obj._text) > -1: + return True + + return False + + def run (self): + self._start_search() + + def stop(self): + self.stopthread.set() + + + +class _JobPaginator(gobject.GObject): + __gsignals__ = { + 'paginated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])) + } + def __init__(self, filelist): + gobject.GObject.__init__(self) + + self._filelist = filelist + self._filedict = {} + self._pagemap = {} + + self._bookheight = 0 + self._count = 0 + self._pagecount = 0 + + self._screen = gtk.gdk.screen_get_default() + self._old_fontoptions = self._screen.get_font_options() + options = cairo.FontOptions() + options.set_hint_style(cairo.HINT_STYLE_MEDIUM) + options.set_antialias(cairo.ANTIALIAS_GRAY) + options.set_subpixel_order(cairo.SUBPIXEL_ORDER_DEFAULT) + options.set_hint_metrics(cairo.HINT_METRICS_DEFAULT) + self._screen.set_font_options(options) + + self._temp_win = gtk.Window() + self._temp_view = widgets._WebView() + + settings = self._temp_view.get_settings() + settings.props.default_font_family = 'DejaVu LGC Serif' + settings.props.sans_serif_font_family = 'DejaVu LGC Sans' + settings.props.serif_font_family = 'DejaVu LGC Serif' + settings.props.monospace_font_family = 'DejaVu LGC Sans Mono' + settings.props.enforce_96_dpi = True + #settings.props.auto_shrink_images = False #FIXME: This does not seem to work + settings.props.enable_plugins = False + settings.props.default_font_size = 12 + settings.props.default_monospace_font_size = 10 + settings.props.default_encoding = 'utf-8' + + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) + self._dpi = 96 + sw.set_size_request(_mm_to_pixel(PAGE_WIDTH, self._dpi), _mm_to_pixel(PAGE_HEIGHT, self._dpi)) + sw.add(self._temp_view) + self._temp_win.add(sw) + self._temp_view.connect('load-finished', self._page_load_finished_cb) + + self._temp_win.show_all() + self._temp_win.unmap() + + self._temp_view.open(self._filelist[self._count]) + + def _page_load_finished_cb(self, v, frame): + f = v.get_main_frame() + pageheight = v.get_page_height() + + if pageheight <= _mm_to_pixel(PAGE_HEIGHT, self._dpi): + pages = 1 + else: + pages = pageheight/float(_mm_to_pixel(PAGE_HEIGHT, self._dpi)) + for i in range(1, int(math.ceil(pages) + 1)): + if pages - i < 0: + pagelen = (pages - math.floor(pages))/pages + else: + pagelen = 1/pages + self._pagemap[float(self._pagecount + i)] = (f.props.uri, (i-1)/math.ceil(pages), pagelen) + + self._pagecount += math.ceil(pages) + self._filedict[f.props.uri.replace('file://', '')] = (math.ceil(pages), math.ceil(pages) - pages) + self._bookheight += pageheight + + if self._count+1 >= len(self._filelist): + self._temp_win.destroy() + self._screen.set_font_options(self._old_fontoptions) + self.emit('paginated') + else: + self._count += 1 + self._temp_view.open(self._filelist[self._count]) + + + def get_file_for_pageno(self, pageno): + ''' + Returns the file in which pageno occurs + ''' + return self._pagemap[pageno][0] + + def get_scrollfactor_pos_for_pageno(self, pageno): + ''' + Returns the position scrollfactor (fraction) for pageno + ''' + return self._pagemap[pageno][1] + + def get_scrollfactor_len_for_pageno(self, pageno): + ''' + Returns the length scrollfactor (fraction) for pageno + ''' + return self._pagemap[pageno][2] + + def get_pagecount_for_file(self, filename): + ''' + Returns the number of pages in file + ''' + return self._filedict[filename][0] + + def get_base_pageno_for_file(self, filename): + ''' + Returns the pageno which begins in filename + ''' + for key in self._pagemap.keys(): + if self._pagemap[key][0].replace('file://', '') == filename: + return key + + return None + + def get_remfactor_for_file(self, filename): + ''' + Returns the remainder factor (1 - fraction length of last page in file) + ''' + return self._filedict[filename][1] + + def get_total_pagecount(self): + ''' + Returns the total pagecount for the Epub file + ''' + return self._pagecount + + def get_total_height(self): + ''' + Returns the total height of the Epub in pixels + ''' + return self._bookheight + + +class _JobFind(gobject.GObject): + __gsignals__ = { + 'updated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])) + } + def __init__(self, document, start_page, n_pages, text, case_sensitive=False): + gobject.GObject.__init__(self) + gtk.gdk.threads_init() + + self._finished = False + self._document = document + self._start_page = start_page + self._n_pages = n_pages + self._text = text + self._case_sensitive = case_sensitive + self.flattoc = self._document.get_flattoc() + self._matchfilelist = [] + self._current_file_index = 0 + self.threads = [] + + s_thread = SearchThread(self) + self.threads.append(s_thread) + s_thread.start() + + def cancel(self): + ''' + Cancels the search job + ''' + for s_thread in self.threads: + s_thread.stop() + + def is_finished(self): + ''' + Returns True if the entire search job has been finished + ''' + return self._finished + + def get_next_file(self): + ''' + Returns the next file which has the search pattern + ''' + self._current_file_index += 1 + try: + path = self._matchfilelist[self._current_file_index] + except IndexError: + self._current_file_index = 0 + path = self._matchfilelist[self._current_file_index] + + return path + + def get_prev_file(self): + ''' + Returns the previous file which has the search pattern + ''' + self._current_file_index -= 1 + try: + path = self._matchfilelist[self._current_file_index] + except IndexError: + self._current_file_index = -1 + path = self._matchfilelist[self._current_file_index] + + return path + + def get_search_text(self): + ''' + Returns the search text + ''' + return self._text + + def get_case_sensitive(self): + ''' + Returns True if the search is case-sensitive + ''' + return self._case_sensitive diff --git a/epubview/jobs.pyc b/epubview/jobs.pyc Binary files differnew file mode 100644 index 0000000..4ba8785 --- /dev/null +++ b/epubview/jobs.pyc diff --git a/epubview/navmap.py b/epubview/navmap.py new file mode 100644 index 0000000..a0a1799 --- /dev/null +++ b/epubview/navmap.py @@ -0,0 +1,93 @@ +from lxml import etree +import gtk + +class NavPoint(object): + def __init__(self, label, contentsrc, children = []): + self._label = label + self._contentsrc = contentsrc + self._children = children + + def get_label(self): + return self._label + + def get_contentsrc(self): + return self._contentsrc + + def get_children(self): + return self._children + + +class NavMap(object): + def __init__(self, opffile, ncxfile, basepath): + self._basepath = basepath + self._opffile = opffile + self._tree = etree.parse(ncxfile) + self._root = self._tree.getroot() + self._gtktreestore = gtk.TreeStore(str, str) + self._flattoc = [] + + self._populate_flattoc() + self._populate_toc() + + def _populate_flattoc(self): + tree = etree.parse(self._opffile) + root = tree.getroot() + + itemmap = {} + manifest = root.find('.//{http://www.idpf.org/2007/opf}manifest') + for element in manifest.iterfind('{http://www.idpf.org/2007/opf}item'): + itemmap[element.get('id')] = element + + spine = root.find('.//{http://www.idpf.org/2007/opf}spine') + for element in spine.iterfind('{http://www.idpf.org/2007/opf}itemref'): + idref = element.get('idref') + href = itemmap[idref].get('href') + self._flattoc.append(self._basepath + href) + + self._opffile.close() + + def _populate_toc(self): + navmap = self._root.find('{http://www.daisy.org/z3986/2005/ncx/}navMap') + for navpoint in navmap.iterfind('./{http://www.daisy.org/z3986/2005/ncx/}navPoint'): + self._process_navpoint(navpoint) + + def _gettitle(self, navpoint): + text = navpoint.find('./{http://www.daisy.org/z3986/2005/ncx/}navLabel/{http://www.daisy.org/z3986/2005/ncx/}text') + return text.text + + def _getcontent(self, navpoint): + text = navpoint.find('./{http://www.daisy.org/z3986/2005/ncx/}content/') + return self._basepath + text.get('src') + + def _process_navpoint(self, navpoint, parent = None): + title = self._gettitle(navpoint) + content = self._getcontent(navpoint) + + #print title, content + + iter = self._gtktreestore.append(parent, [title, content]) + #self._flattoc.append((title, content)) + + childnavpointlist = list(navpoint.iterfind('./{http://www.daisy.org/z3986/2005/ncx/}navPoint')) + + if len(childnavpointlist): + for childnavpoint in childnavpointlist: + self._process_navpoint(childnavpoint, parent = iter) + else: + return + + def get_gtktreestore(self): + ''' + Returns a GtkTreeModel representation of the + Epub table of contents + ''' + return self._gtktreestore + + def get_flattoc(self): + ''' + Returns a flat (linear) list of files to be + rendered. + ''' + return self._flattoc + +#t = TocParser('/home/sayamindu/Desktop/Test/OPS/fb.ncx')
\ No newline at end of file diff --git a/epubview/navmap.pyc b/epubview/navmap.pyc Binary files differnew file mode 100644 index 0000000..8eb322b --- /dev/null +++ b/epubview/navmap.pyc diff --git a/epubview/widgets.py b/epubview/widgets.py new file mode 100644 index 0000000..d80c45a --- /dev/null +++ b/epubview/widgets.py @@ -0,0 +1,31 @@ +import webkit +import gtk + + +class _WebView(webkit.WebView): + def __init__(self): + webkit.WebView.__init__(self) + + def get_page_height(self): + ''' + Gets height (in pixels) of loaded (X)HTML page. + This is done via javascript at the moment + ''' + #TODO: Need to check status of page load + js = 'oldtitle=document.title;document.title=Math.max(document.body.scrollHeight, document.body.offsetHeight,document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);' + self.execute_script(js) + ret = self.get_main_frame().get_title() + js = 'document.title=oldtitle;' + self.execute_script(js) + if ret is None: + return 0 + return int(ret) + + def add_bottom_padding(self, incr): + ''' + Adds incr pixels of padding to the end of the loaded (X)HTML page. + This is done via javascript at the moment + ''' + js = ('var newdiv = document.createElement("div");newdiv.style.height = "%dpx";document.body.appendChild(newdiv);' % incr) + self.execute_script(js) + diff --git a/epubview/widgets.pyc b/epubview/widgets.pyc Binary files differnew file mode 100644 index 0000000..cffed84 --- /dev/null +++ b/epubview/widgets.pyc diff --git a/locale/af/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/af/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..af80674 --- /dev/null +++ b/locale/af/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/af/activity.linfo b/locale/af/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/af/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/am/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/am/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/am/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/am/activity.linfo b/locale/am/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/am/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ar/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ar/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..e141196 --- /dev/null +++ b/locale/ar/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ar/activity.linfo b/locale/ar/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ar/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ay/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ay/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ay/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ay/activity.linfo b/locale/ay/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ay/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/bg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/bg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..adc24f5 --- /dev/null +++ b/locale/bg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/bg/activity.linfo b/locale/bg/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/bg/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/bi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/bi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/bi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/bi/activity.linfo b/locale/bi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/bi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/bn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/bn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..e1397c1 --- /dev/null +++ b/locale/bn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/bn/activity.linfo b/locale/bn/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/bn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/bn_IN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/bn_IN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..3bd8b8e --- /dev/null +++ b/locale/bn_IN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/bn_IN/activity.linfo b/locale/bn_IN/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/bn_IN/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ca/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ca/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..b5b0634 --- /dev/null +++ b/locale/ca/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ca/activity.linfo b/locale/ca/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ca/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/cpp/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/cpp/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/cpp/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/cpp/activity.linfo b/locale/cpp/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/cpp/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/cs/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/cs/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/cs/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/cs/activity.linfo b/locale/cs/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/cs/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/da/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/da/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..b544e6c --- /dev/null +++ b/locale/da/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/da/activity.linfo b/locale/da/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/da/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/de/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/de/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..bee1cc4 --- /dev/null +++ b/locale/de/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/de/activity.linfo b/locale/de/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/de/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/dz/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/dz/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/dz/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/dz/activity.linfo b/locale/dz/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/dz/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/el/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/el/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..4320871 --- /dev/null +++ b/locale/el/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/el/activity.linfo b/locale/el/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/el/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/en/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/en/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/en/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/en/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/en_US/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/en_US/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..1864bf1 --- /dev/null +++ b/locale/en_US/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/en_US/activity.linfo b/locale/en_US/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/en_US/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/es/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/es/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..aedf57f --- /dev/null +++ b/locale/es/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/es/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/fa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/fa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..905320b --- /dev/null +++ b/locale/fa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/fa/activity.linfo b/locale/fa/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/fa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/fa_AF/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/fa_AF/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c29bf21 --- /dev/null +++ b/locale/fa_AF/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/fa_AF/activity.linfo b/locale/fa_AF/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/fa_AF/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ff/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ff/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ff/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ff/activity.linfo b/locale/ff/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ff/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/fi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/fi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/fi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/fi/activity.linfo b/locale/fi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/fi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/fil/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/fil/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..ca5e0b0 --- /dev/null +++ b/locale/fil/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/fil/activity.linfo b/locale/fil/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/fil/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/fr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/fr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..3d1b59e --- /dev/null +++ b/locale/fr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/fr/activity.linfo b/locale/fr/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/fr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/gu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/gu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..46b5673 --- /dev/null +++ b/locale/gu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/gu/activity.linfo b/locale/gu/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/gu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ha/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ha/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ha/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ha/activity.linfo b/locale/ha/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ha/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/he/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/he/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/he/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/he/activity.linfo b/locale/he/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/he/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/hi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/hi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..83b7084 --- /dev/null +++ b/locale/hi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/hi/activity.linfo b/locale/hi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/hi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ht/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ht/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..d7de481 --- /dev/null +++ b/locale/ht/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ht/activity.linfo b/locale/ht/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ht/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/hu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/hu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/hu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/hu/activity.linfo b/locale/hu/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/hu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/id/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/id/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..2227226 --- /dev/null +++ b/locale/id/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/id/activity.linfo b/locale/id/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/id/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ig/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ig/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ig/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ig/activity.linfo b/locale/ig/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ig/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/is/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/is/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..f024d59 --- /dev/null +++ b/locale/is/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/is/activity.linfo b/locale/is/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/is/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/it/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/it/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..7496aa5 --- /dev/null +++ b/locale/it/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/it/activity.linfo b/locale/it/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/it/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ja/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ja/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..3bb37bb --- /dev/null +++ b/locale/ja/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ja/activity.linfo b/locale/ja/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ja/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/km/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/km/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..4adfbf1 --- /dev/null +++ b/locale/km/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/km/activity.linfo b/locale/km/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/km/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ko/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ko/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ko/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ko/activity.linfo b/locale/ko/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ko/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/kos/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/kos/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..2227226 --- /dev/null +++ b/locale/kos/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/kos/activity.linfo b/locale/kos/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/kos/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..64ff4c3 --- /dev/null +++ b/locale/mg/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mg/activity.linfo b/locale/mg/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mg/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/mi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mi/activity.linfo b/locale/mi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..3e8601b --- /dev/null +++ b/locale/mk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mk/activity.linfo b/locale/mk/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mk/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ml/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ml/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/ml/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ml/activity.linfo b/locale/ml/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ml/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..142972b --- /dev/null +++ b/locale/mn/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mn/activity.linfo b/locale/mn/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..754f27a --- /dev/null +++ b/locale/mr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mr/activity.linfo b/locale/mr/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ms/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ms/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/ms/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ms/activity.linfo b/locale/ms/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ms/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/mvo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/mvo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..414c55f --- /dev/null +++ b/locale/mvo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/mvo/activity.linfo b/locale/mvo/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/mvo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/nb/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/nb/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..b251060 --- /dev/null +++ b/locale/nb/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/nb/activity.linfo b/locale/nb/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/nb/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ne/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ne/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..47c016a --- /dev/null +++ b/locale/ne/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ne/activity.linfo b/locale/ne/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ne/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/nl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/nl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..b514b6b --- /dev/null +++ b/locale/nl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/nl/activity.linfo b/locale/nl/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/nl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/pa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pa/activity.linfo b/locale/pa/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pap/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pap/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..27e30e6 --- /dev/null +++ b/locale/pap/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pap/activity.linfo b/locale/pap/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pap/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pis/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pis/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..414c55f --- /dev/null +++ b/locale/pis/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pis/activity.linfo b/locale/pis/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pis/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..7aa6940 --- /dev/null +++ b/locale/pl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pl/activity.linfo b/locale/pl/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ps/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ps/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..12df916 --- /dev/null +++ b/locale/ps/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ps/activity.linfo b/locale/ps/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ps/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pt/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pt/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..1b02adc --- /dev/null +++ b/locale/pt/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pt/activity.linfo b/locale/pt/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pt/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/pt_BR/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/pt_BR/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..236a7d7 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/pt_BR/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/qu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/qu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/qu/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/qu/activity.linfo b/locale/qu/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/qu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ro/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ro/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..9b92966 --- /dev/null +++ b/locale/ro/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ro/activity.linfo b/locale/ro/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ro/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ru/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ru/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..1ab632c --- /dev/null +++ b/locale/ru/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ru/activity.linfo b/locale/ru/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ru/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/rw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/rw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..cd9ccf4 --- /dev/null +++ b/locale/rw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/rw/activity.linfo b/locale/rw/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/rw/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sd/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sd/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..bbe0f25 --- /dev/null +++ b/locale/sd/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sd/activity.linfo b/locale/sd/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sd/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/si/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/si/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..d3c03a3 --- /dev/null +++ b/locale/si/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/si/activity.linfo b/locale/si/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/si/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/sk/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sk/activity.linfo b/locale/sk/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sk/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..b00912d --- /dev/null +++ b/locale/sl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sl/activity.linfo b/locale/sl/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sq/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sq/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..2227226 --- /dev/null +++ b/locale/sq/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sq/activity.linfo b/locale/sq/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sq/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sv/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sv/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..19e3588 --- /dev/null +++ b/locale/sv/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sv/activity.linfo b/locale/sv/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sv/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/sw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/sw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/sw/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/sw/activity.linfo b/locale/sw/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/sw/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ta/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ta/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..ac0bbf0 --- /dev/null +++ b/locale/ta/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ta/activity.linfo b/locale/ta/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ta/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/te/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/te/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..e545e99 --- /dev/null +++ b/locale/te/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/te/activity.linfo b/locale/te/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/te/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/th/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/th/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..8b32d08 --- /dev/null +++ b/locale/th/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/th/activity.linfo b/locale/th/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/th/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/tpi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/tpi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..414c55f --- /dev/null +++ b/locale/tpi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/tpi/activity.linfo b/locale/tpi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/tpi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/tr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/tr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..e387862 --- /dev/null +++ b/locale/tr/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/tr/activity.linfo b/locale/tr/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/tr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/tvl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/tvl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..ca5e0b0 --- /dev/null +++ b/locale/tvl/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/tvl/activity.linfo b/locale/tvl/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/tvl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/tzo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/tzo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..2227226 --- /dev/null +++ b/locale/tzo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/tzo/activity.linfo b/locale/tzo/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/tzo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ug/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ug/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/ug/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ug/activity.linfo b/locale/ug/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ug/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/ur/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/ur/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..69f80cd --- /dev/null +++ b/locale/ur/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/ur/activity.linfo b/locale/ur/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/ur/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/vi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/vi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..95cb6ec --- /dev/null +++ b/locale/vi/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/vi/activity.linfo b/locale/vi/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/vi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/wa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/wa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..c6618f2 --- /dev/null +++ b/locale/wa/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/wa/activity.linfo b/locale/wa/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/wa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/yo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/yo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..63a6eea --- /dev/null +++ b/locale/yo/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/yo/activity.linfo b/locale/yo/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/yo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/zh_CN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/zh_CN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..8e7215c --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/zh_CN/activity.linfo b/locale/zh_CN/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/zh_CN/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/locale/zh_TW/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo b/locale/zh_TW/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo Binary files differnew file mode 100644 index 0000000..65ab709 --- /dev/null +++ b/locale/zh_TW/LC_MESSAGES/org.laptop.sugar.AnnoActivity.mo diff --git a/locale/zh_TW/activity.linfo b/locale/zh_TW/activity.linfo new file mode 100644 index 0000000..23ebeb6 --- /dev/null +++ b/locale/zh_TW/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = Anno diff --git a/po/Read.pot b/po/Read.pot new file mode 100644 index 0000000..a969bfd --- /dev/null +++ b/po/Read.pot @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" diff --git a/po/af.po b/po/af.po new file mode 100644 index 0000000..c48f800 --- /dev/null +++ b/po/af.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-06-20 19:03-0400\n" +"Last-Translator: Morgan Collett <morgan.collett@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Lees" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Redigeer" + +#: readactivity.py:103 +msgid "View" +msgstr "Besigtig" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Vorige" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Volgende" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Soek eerste" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Soek vorige" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Soek volgende" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Terug" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Vorentoe" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Zoem uit" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Zoem in" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Zoem na wydte" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Zoem na pas" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Werklike grootte" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Volskerm" diff --git a/po/am.po b/po/am.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/am.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..228dc96 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,154 @@ +# translation of read-activity.po to Arabic +# Khaled Hosny <khaledhosny@eglug.org>, 2007. +# Ahmed Mansour <atphalix@users.arabeyes.org>, 2008. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: read-activity\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: 2009-08-28 15:37-0400\n" +"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n" +"Language-Team: Arabic <en@li.org>\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n>=3 && " +"n<=10 ? 3 : n>=11 && n<=99 ? 4 : 5;\n" +"X-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "اقرأ" + +#: readactivity.py:139 +msgid "Edit" +msgstr "تحرير" + +#: readactivity.py:151 +msgid "View" +msgstr "عرض" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "اختر الوثيقة" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "ألغِ" + +#: readdialog.py:55 +msgid "Ok" +msgstr "حسنا" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>العنوان</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>التفاصيل</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "علامة أضافها %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "أضف ملاحظات للعلامة: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "علامة %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "علامة على الصفحة %d" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "السابق" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "التالي" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "أوجد الأول" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "أوجد السابق" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "أوجد التالي" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "للخلف" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "الصفحة السابقة" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "العلامة السابقة" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "للأمام" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "الصفحة التالية" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "العلامة التالية" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "صغّر" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "كبّر" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "لائِم العرض" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "لائِم الصفحة" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "المقاس الأصلي" + +#: readtoolbar.py:508 +msgid "%" +msgstr "%" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "ملء الشاشة" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "صفحة %i من %i" + +#~ msgid "Read Activity" +#~ msgstr "نشاط القراءة" diff --git a/po/ay.po b/po/ay.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/ay.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..183e977 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,86 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-03-01 13:04-0500\n" +"Last-Translator: Alexander Todorov <atodorov@redhat.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Четене" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Редактиране" + +#: readactivity.py:103 +msgid "View" +msgstr "Изглед" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Предишен" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Следващ" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Търсене на първо съвпадение" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Търсене напред" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Търсене назад" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Назад" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Напред" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Намаляване" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Увеличаване" + +# виж превода на evince +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Запълване на страницата по ширина" + +# виж превода на evince +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Запълване на страницата" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Оригинален размер" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "На цял екран" diff --git a/po/bi.po b/po/bi.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/bi.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/bn.po b/po/bn.po new file mode 100644 index 0000000..df04b67 --- /dev/null +++ b/po/bn.po @@ -0,0 +1,80 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-12-30 17:35+0000\n" +"Last-Translator: Jamil Ahmed <itsjamil@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "পড়" + +#: readactivity.py:91 +msgid "Edit" +msgstr "সম্পাদনা" + +#: readactivity.py:99 +msgid "View" +msgstr "প্রদর্শন" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "পুর্ববর্তী" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "পরবর্তী" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "পেছনে" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "সামনে" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "ছোট করো" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "বড় করো" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "প্রস্থ অনুসারে বড় করো" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "প্রয়োজন অনুসারে বড় করো" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "আসল আকার" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "প্রথমটি খুঁজো" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "আগেরটি খুঁজো" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "পরেরটি খুঁজো" diff --git a/po/bn_IN.po b/po/bn_IN.po new file mode 100644 index 0000000..a44936b --- /dev/null +++ b/po/bn_IN.po @@ -0,0 +1,83 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-22 09:17+0000\n" +"Last-Translator: Sankarshan Mukhopadhyay <sankarshan.mukhopadhyay@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "পড়ুন" + +#: readactivity.py:91 +msgid "Edit" +msgstr "সম্পাদন" + +#: readactivity.py:99 +msgid "View" +msgstr "প্রদর্শন" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "পূর্বের" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "পরের" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "প্রথমটি খুঁজে বের করুন" + +#: readtoolbar.py:146 +#, fuzzy +msgid "Find previous" +msgstr "পূর্বেরটি খুঁজে বের করুন" + +#: readtoolbar.py:148 +#, fuzzy +msgid "Find next" +msgstr "পরেরটি খুঁজে বের করুন" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "পিছনে" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "এগিয়ে চলুন" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "ছোট করুন" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "বড় করুন" + +#: readtoolbar.py:274 +#, fuzzy +msgid "Zoom to width" +msgstr "প্রস্থের মাপে দেখুন" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "প্রকৃত মাপ" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..0724501 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,80 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-08 18:50+0000\n" +"Last-Translator: Jaume <jaume@nualart.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Llegir" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Editar" + +#: readactivity.py:99 +msgid "View" +msgstr "Veure" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Previ" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Següent" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Troba el primer" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Troba l'anterior" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Troba el següent" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Enrere" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Endavant" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Reduir" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Ampliar" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Ajustar amplada" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Ajustar del tot" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Dimensió actual" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" diff --git a/po/cpp.po b/po/cpp.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/cpp.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..47fb192 --- /dev/null +++ b/po/da.po @@ -0,0 +1,150 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: 2009-08-17 21:08-0400\n" +"Last-Translator: Chris Leonard <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: da\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "Læs" + +#: readactivity.py:139 +msgid "Edit" +msgstr "Redigér" + +#: readactivity.py:151 +msgid "View" +msgstr "Vis" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "Forrige" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "Næste" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "Find næste" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "Tilbage" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "Frem" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "Formindsk" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "Forstør" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "Tilpas til bredde" + +#: readtoolbar.py:486 +#, fuzzy +msgid "Zoom to fit" +msgstr "Tilpas til bredde" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:508 +msgid "%" +msgstr "%" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "Fuldskærm" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..5fa013a --- /dev/null +++ b/po/de.po @@ -0,0 +1,157 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +# 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 <EMAIL@ADDRESS>, YEAR. +# This file is distributed under the same license as the PACKAGE package. +# Fabian Affolter <fab@fedoraproject.org>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: xbook\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2010-03-28 23:12+0200\n" +"Last-Translator: Markus <m.slg@gmx.de>\n" +"Language-Team: cvs@fedoraproject.org <fedora-trans-de@redhat.com>\n" +"Language: de\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-Generator: Pootle 2.0.3\n" +"X-Poedit-Language: German\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Lesen" + +#: readactivity.py:330 +msgid "Back" +msgstr "Zurück" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Vorherige Seite" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Vorheriges Lesezeichen" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Vor" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Nächste Seite" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Nächstes Lesezeichen" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Dokument auswählen" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Abbrechen" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Ok" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Titel</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Details</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Lesezeichen hinzugefügt von %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Anmerkungen zu Lesezeichen hinzufügen: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "Lesezeichen von %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "Lesezeichen für Seite %d" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Vorheriges" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Nächstes" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Suche vorwärts" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Suche rückwärts" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Weitersuchen" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Verkleinern" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Vergrößern" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Breite anpassen" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Größe anpassen" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Originalgröße" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Vollbild" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Seite %i von %i" + +#~ msgid "Edit" +#~ msgstr "Bearbeiten" + +#~ msgid "View" +#~ msgstr "Ansehen" + +#~ msgid "Read Activity" +#~ msgstr "Lese-Aktivitäten" diff --git a/po/dz.po b/po/dz.po new file mode 100644 index 0000000..cc83252 --- /dev/null +++ b/po/dz.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..89b83d6 --- /dev/null +++ b/po/el.po @@ -0,0 +1,92 @@ +# Greek translation of Xbook project. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Simos Xenitellis <simos.lists@googlemail.com>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: Xbook project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2008-10-24 11:45-0400\n" +"Last-Translator: John Sarlis <sarlis@sch.gr>\n" +"Language-Team: Greek <olpc@grnet.gr>\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-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "Ανάγνωση" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Επεξεργασία" + +#: readactivity.py:137 +msgid "View" +msgstr "Προβολή" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "Επιλογή αρχείου κειμένου" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Προηγούμενο" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Επόμενο" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Βρες το πρώτο" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Βρες το προηγούμενο" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Βρες το επόμενο" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Πίσω" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Μπροστά" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Εστίαση έξω" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Εστίαση μέσα" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Εστίαση στο πλάτος" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Εστίαση στη σελίδα" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Πραγματικό μέγεθος" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Πλήρης οθόνη" + +#~ msgid "Read Activity" +#~ msgstr "Ανάγνωση δραστηριότητας" diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/en.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..ef3dfbc --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,88 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2008-11-03 01:08-0500\n" +"Last-Translator: Desiree M Durham <desireemarie7@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "Read" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Edit" + +#: readactivity.py:137 +msgid "View" +msgstr "View" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "Choose document" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Previous" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Next" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Find first" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Find previous" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Find next" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Back" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Forward" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Zoom out" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Zoom in" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Zoom to width" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Zoom to fit" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Actual size" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Fullscreen" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..182c96d --- /dev/null +++ b/po/es.po @@ -0,0 +1,105 @@ +# Spanish translations for PACKAGE package. +# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Tomeu Vizoso <tomeu@tomeuvizoso.net>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: xbook\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2009-03-07 23:32-0500\n" +"Last-Translator: Chris Leonard <cjl@laptop.org>\n" +"Language-Team: Fedora Spanish <fedora-trans-es@redhat.com>\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-Generator: Pootle 1.1.0rc2\n" +"X-Poedit-Language: Spanish\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "Leer" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Editar" + +#: readactivity.py:137 +msgid "View" +msgstr "Ver" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "Escoger documento" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Anterior" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Siguiente" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Encontrar primero" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Encontrar previo" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Encontrar siguiente" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Volver" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Avanzar" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Reducir" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Ampliar" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Ajustar al ancho" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Ampliar hasta ajustar" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Tamaño real" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Pantalla completa" + +#~ msgid "Read Activity" +#~ msgstr "Actividad Leer" + +#~ msgid "Open a document to read" +#~ msgstr "Abrir un documento para leer" + +#~ msgid "All supported formats" +#~ msgstr "Todos los formatos soportados" + +#~ msgid "All files" +#~ msgstr "Todos los ficheros" + +#~ msgid "Open" +#~ msgstr "Abrir" diff --git a/po/fa.po b/po/fa.po new file mode 100644 index 0000000..e7982e7 --- /dev/null +++ b/po/fa.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-09 08:31+0000\n" +"Last-Translator: Sohaib Obaidi <ebtihaj_obaidi@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\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-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "خواندن" + +#: readactivity.py:91 +msgid "Edit" +msgstr "ویراستن" + +#: readactivity.py:99 +msgid "View" +msgstr "دیدن" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "قبلی" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "بعدی" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "عقب" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "جلو" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "کوچکنمایی" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "بزرگنمایی" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "بزرگنمایی به عرض" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "بزرگنمایی به اندازه" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "اندازه واقعی" + +#: readtoolbar.py:303 +msgid "%" +msgstr "٪" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "اولی را بازیاب" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "گذشته را بازیاب" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "بعدی را بازیاب" diff --git a/po/fa_AF.po b/po/fa_AF.po new file mode 100644 index 0000000..6130e4d --- /dev/null +++ b/po/fa_AF.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-28 06:22-0500\n" +"Last-Translator: Sohaib Obaidi <ebtihaj_obaidi@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\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-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "خواندن" + +#: readactivity.py:91 +msgid "Edit" +msgstr "ویراستن" + +#: readactivity.py:99 +msgid "View" +msgstr "دیدن" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "قبلی" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "بعدی" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "عقب" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "جلو" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "کوچکنمایی" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "بزرگنمایی" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "بزرگنمایی به عرض" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "بزرگنمایی به اندازه" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "اندازه واقعی" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "اولی را بازیاب" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "گذشته را بازیاب" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "بعدی را بازیاب" diff --git a/po/ff.po b/po/ff.po new file mode 100644 index 0000000..a13ecf6 --- /dev/null +++ b/po/ff.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/fil.po b/po/fil.po new file mode 100644 index 0000000..a5f63b4 --- /dev/null +++ b/po/fil.po @@ -0,0 +1,140 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "" + +#: readactivity.py:330 +msgid "Back" +msgstr "" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "" + +#: readactivity.py:346 +msgid "Forward" +msgstr "" + +#: readactivity.py:349 +msgid "Next page" +msgstr "" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:227 +msgid "%" +msgstr "" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..6474cbb --- /dev/null +++ b/po/fr.po @@ -0,0 +1,150 @@ +# translation of xbook.master.po to Français +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Gauthier Ancelin <gauthier.ancelin@laposte.net>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: xbook.master\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2010-01-25 07:13+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: Français <fedora-trans-fr@redhat.com>\n" +"Language: fr\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-Generator: Pootle 2.0.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Lire" + +#: readactivity.py:330 +msgid "Back" +msgstr "Reculer" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Page précédente" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Signet précédent" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Avancer" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Page suivante" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Signet suivant" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Choisir un document" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Annuler" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Ok" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Titre</b> :" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Détails</b> :" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Signet ajouté par %(user)s il y a %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Ajouter des notes pour le signet: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "Signet de %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "Signet pour la page %d" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Précédent" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Suivant" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Trouver le premier" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Trouver le précédent" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Trouver le suivant" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Zoom arrière" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Zoom avant" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Zoom à la largeur de la page" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Zoom plein écran" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Dimension actuelle" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Plein écran" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Page %i sur %i" + +#~ msgid "Edit" +#~ msgstr "Éditer" + +#~ msgid "View" +#~ msgstr "Afficher" + +#~ msgid "Read Activity" +#~ msgstr "Lecture" diff --git a/po/gu.po b/po/gu.po new file mode 100644 index 0000000..d206685 --- /dev/null +++ b/po/gu.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:103 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/ha.po b/po/ha.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/ha.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/he.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..cb743d0 --- /dev/null +++ b/po/hi.po @@ -0,0 +1,150 @@ +# translation of read-activity.po to Hindi +# G Karunakar <karunakar@indlinux.org>, 2007. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: read-activity\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2010-03-22 22:50+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: Hindi <indlinux-hindi@lists.sourceforge.net>\n" +"Language: hi\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-Generator: Pootle 2.0.3\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "पढ़ें" + +#: readactivity.py:330 +msgid "Back" +msgstr "पीछे" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "पिछला पेज" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "पिछला पसंदीदा" + +#: readactivity.py:346 +msgid "Forward" +msgstr "आगे" + +#: readactivity.py:349 +msgid "Next page" +msgstr "अगला पेज" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "अगला पसंदीदा" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "दस्तावेज़ चुनें" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "रद्द करें" + +#: readdialog.py:55 +msgid "Ok" +msgstr "ठीक" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>शीर्षक</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>विवरण</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "%(user)s %(time)s द्वारा पसंदीदा जोड़े गए" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "पसंदीदा के लिए टीप जोड़ें: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "%s का पसंदीदा" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "पृष्ठ %d के लिए पसंदीदा" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "पिछला" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "अगला" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "पहीले ढूँढें" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "पिछला ढूंढें" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "अगला ढूंढें" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "छोटे आकार में दिखाएँ" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "बड़े आकार में दिखाएँ" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "चौड़ाई में बड़ा करें" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "फिट होने लायक बड़ा करें" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "असली आकार" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "पूर्ण स्क्रीन" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "पृष्ठ %i में से: %i" + +#~ msgid "Edit" +#~ msgstr "संपादन" + +#~ msgid "View" +#~ msgstr "दृश्य" + +#~ msgid "Read Activity" +#~ msgstr "पढ़ने के क्रियाकलाप" diff --git a/po/ht.po b/po/ht.po new file mode 100644 index 0000000..418d73a --- /dev/null +++ b/po/ht.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-03-11 09:03-0400\n" +"Last-Translator: Jude Augusma <jayme2901@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Li" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Edite" + +#: readactivity.py:103 +msgid "View" +msgstr "Vizyalize" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Previzyon" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Pwochen" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Jwenn an premye" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Jwenn presedan" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Jwenn pwochen" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Retounen" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Avanse" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "rale soti" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Rale vini" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Rale louvri" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Rale pou ajiste" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Vrè dimansyon " + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Tout ekran" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..f099bf7 --- /dev/null +++ b/po/id.po @@ -0,0 +1,148 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "" + +#: readactivity.py:139 +msgid "Edit" +msgstr "" + +#: readactivity.py:151 +msgid "View" +msgstr "" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:508 +msgid "%" +msgstr "" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/ig.po b/po/ig.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/ig.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..2df1676 --- /dev/null +++ b/po/is.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Lesa" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Breyta" + +#: readactivity.py:99 +msgid "View" +msgstr "Sýna" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Fyrri" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Næsta" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Aftur" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Áfram" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Stækka" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Minnka" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Stækka í breidd" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Stækka til að passa" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Raunstærð" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..8b8b501 --- /dev/null +++ b/po/it.po @@ -0,0 +1,153 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2009-08-25 13:28-0400\n" +"Last-Translator: Carlo Falciola <cfalciola@yahoo.it>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: it\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Leggi" + +#: readactivity.py:330 +msgid "Back" +msgstr "Indietro" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Pagina precedente" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Segnalibro precedente" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Avanti" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Prossima pagina" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Prossimo segnalibro" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Scegli documento" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Annulla" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Ok" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Titolo</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Dettagli</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Segnalibro inserito da %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Aggiungi annotazioni al segnalibro: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "segnalibro di %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "segnalibro alla pagina %d" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Precedente" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Prossima" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Trova il primo" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Trova successivo" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Trova prossimo" + +# Potrebbe essere anche "Rimpicciolire" o "Più piccolo" +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Zoom indietro" + +# Potrebbe essere anche "Ingrandire" o "Più grande" +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Zoom avanti" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Zoom alla larghezza" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Zoom alla pagina" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Larghezza attuale" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Schermo intero" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Pagina %i di %i" + +#~ msgid "Edit" +#~ msgstr "Modifica" + +#~ msgid "View" +#~ msgstr "Vista" + +#, fuzzy +#~ msgid "Read Activity" +#~ msgstr "Attività di lettura" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..6d0ae31 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,147 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2010-01-22 04:15+0200\n" +"Last-Translator: korakurider <korakurider@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ja\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-Generator: Pootle 2.0.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Read" + +#: readactivity.py:330 +msgid "Back" +msgstr "戻る" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "前ページ" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "前のブックマーク" + +#: readactivity.py:346 +msgid "Forward" +msgstr "進む" + +#: readactivity.py:349 +msgid "Next page" +msgstr "次ページ" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "次のブックマーク" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "文書を選ぶ" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "キャンセル" + +#: readdialog.py:55 +msgid "Ok" +msgstr "OK" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>表題</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>詳細</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "%(user)sが %(time)s に追加したブックマーク" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "ブックマークにノートを追加: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "%s のブックマーク" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "ページ %d へのブックマーク" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "前へ" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "次へ" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "最初から検索" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "前を検索" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "次を検索" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "縮小" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "拡大" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "幅にあわせて拡大" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "画面にあわせて拡大" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "実際のサイズ" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "全画面" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "ページ %i/%i" + +#~ msgid "Edit" +#~ msgstr "編集" + +#~ msgid "View" +#~ msgstr "ビュー" diff --git a/po/km.po b/po/km.po new file mode 100644 index 0000000..a9c0ad2 --- /dev/null +++ b/po/km.po @@ -0,0 +1,84 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Rit Lim <rit.lim@gmail.com>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-03-17 16:50-0400\n" +"Last-Translator: Rit Lim <rit.lim@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "អាន" + +#: readactivity.py:91 +msgid "Edit" +msgstr "កែ" + +#: readactivity.py:103 +msgid "View" +msgstr "មើល" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "ទៅក្រោយ" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "ទៅមុខ" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "រកទីមួយនៃ" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "រកទៅក្រោយនៃ" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "រកទៅមុខនៃ" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "ថយក្រោយ" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "ថយទៅមុខ" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "ពង្រីក" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "បង្រួម" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "ប៉ុនទទឹង" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "អោយសម" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "ទំហំពិត" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "ពេញអេក្រង់" diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..cc83252 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/kos.po b/po/kos.po new file mode 100644 index 0000000..f099bf7 --- /dev/null +++ b/po/kos.po @@ -0,0 +1,148 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "" + +#: readactivity.py:139 +msgid "Edit" +msgstr "" + +#: readactivity.py:151 +msgid "View" +msgstr "" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:508 +msgid "%" +msgstr "" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/mg.po b/po/mg.po new file mode 100644 index 0000000..8708bae --- /dev/null +++ b/po/mg.po @@ -0,0 +1,150 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: 2009-08-23 07:23-0400\n" +"Last-Translator: Zafimamy Gabriella Ralaivao <gabriella@intnet.mu>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: mg\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "vakio" + +#: readactivity.py:139 +msgid "Edit" +msgstr "Amboary" + +#: readactivity.py:151 +msgid "View" +msgstr "jereo" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "Mifidiana tahirin-kevitra" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +#, fuzzy +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Bokimarika nampidirin'i %(mpampiasa) tamin'ny %(fotoana)" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "teo aloha" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "manaraka" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "tadiavo aloha" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "tadiavo ny teo aloha" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "tadiavo ny manaraka" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "miverina" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "Pejy teo aloha" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "Bokimarika teo aloha" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "Aroso" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "Pejy manaraka" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "Bokimarika manaraka" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "Tomory lavitra" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "Tomory akaiky" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "Tomory amin'ny habeny" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "Tomory amin'ny mahaomby" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "hadiry tena izy" + +#: readtoolbar.py:508 +msgid "%" +msgstr "%" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/mi.po b/po/mi.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/mi.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 0000000..0078541 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,83 @@ +# translation of mk.po to Macedonian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Arangel Angov <arangel@linux.net.mk>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: mk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-11-22 20:59+0000\n" +"Last-Translator: Arangel Angov <arangel@slobodensoftver.org.mk>\n" +"Language-Team: Macedonian <ossm-members@hedona.on.net.mk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Читај" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Уреди" + +#: readactivity.py:99 +msgid "View" +msgstr "Поглед" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Претходно" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Следно" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Назад" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Напред" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Намали" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Зголеми" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Зголеми во ширина" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Собери" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Вистинска големина" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#~ msgid "Read Activity" +#~ msgstr "Активност за читање" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/ml.po b/po/ml.po new file mode 100644 index 0000000..cc83252 --- /dev/null +++ b/po/ml.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/mn.po b/po/mn.po new file mode 100644 index 0000000..0012687 --- /dev/null +++ b/po/mn.po @@ -0,0 +1,149 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2009-09-22 13:51-0400\n" +"Last-Translator: Odontsetseg Bat-Erdene <obat-erdene@suffolk.edu>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: mn\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Унших" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Засварлах" + +#: readactivity.py:137 +msgid "View" +msgstr "Харах" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Баримт сонгох" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Өмнөх" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Дараах" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Эхнийхийг олох" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Өмнөхийг олох" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Дараагийнхийг олох" + +#: readactivity.py:330 +msgid "Back" +msgstr "Буцах" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Урагшлах" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Холдуулах" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Ойртуулах" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Өргөнд тааруулах" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Багтахаар гаргах" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Бодит хэмжээ" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Дэлгэц дүүрэн" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Өмнөх хуудас" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Өмнөх тэмдэглэгээ" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Дараах хуудас" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Дараах тэмдэглэгээ" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Болио" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Зөв" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Гарчиг</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Деталь</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "%(user)s %(time)s-т тэмдэглэгээ нэмсэн" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Тэмдэглэгээнд тайлбар хийх: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "%s-iin тэмдэглэгээ" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "%d -р хуудасны тэмдэглэгээ" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "%i-н %i-р хуудас" diff --git a/po/mr.po b/po/mr.po new file mode 100644 index 0000000..848e40e --- /dev/null +++ b/po/mr.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-04-28 02:45-0400\n" +"Last-Translator: Rupali Sarode <rups23in@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "वाचा" + +#: readactivity.py:91 +msgid "Edit" +msgstr "संपादन करणे" + +#: readactivity.py:103 +msgid "View" +msgstr "पाहा" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "अगोदरचा" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "यानंतर" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "पहिले शोधा" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "अगोदरचे शोधा" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "नंतरच शोधा" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "मागे" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "पुढे पाठविणे" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "झूम आउट" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "झूम ईन" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "झूम टू वीड्त" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "झूम टू फिट" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "वास्तविक आकार" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "पूर्ण पडदा" diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/mvo.po b/po/mvo.po new file mode 100644 index 0000000..840ef9f --- /dev/null +++ b/po/mvo.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:103 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..72145f0 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,88 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-07-23 16:45+0100\n" +"Last-Translator: Kent Dahl <kentda@pvv.org>\n" +"Language-Team: Norwegian <i18n-no@lister.ping.uio.no>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 +#: readactivity.py:95 +msgid "Read" +msgstr "Les" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Endre" + +#: readactivity.py:103 +#, fuzzy +msgid "View" +msgstr "Visning" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Forrige" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Neste" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Finn første" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Finn forrige" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Finn neste" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Tilbake" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Fremover" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Forminsk" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Forstørr" + +#: readtoolbar.py:283 +#, fuzzy +msgid "Zoom to width" +msgstr "Tilpass til bredden" + +#: readtoolbar.py:289 +#, fuzzy +msgid "Zoom to fit" +msgstr "Tilpass til størrelsen" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Faktisk størrelse" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Fullskjerm" diff --git a/po/ne.po b/po/ne.po new file mode 100644 index 0000000..6004aab --- /dev/null +++ b/po/ne.po @@ -0,0 +1,91 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2009-02-25 23:58-0500\n" +"Last-Translator: Shaksham Thapa <shaksham@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "पढ" + +#: readactivity.py:125 +msgid "Edit" +msgstr "सम्पादन" + +#: readactivity.py:137 +msgid "View" +msgstr "दृश्य" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "कागतपत्र छान" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "पहिलाको" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "यसपछिको" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "पहिलो भेट्टाउ" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "पहिलाको भेट्टाउ" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "यसपछिको भेट्टाउ" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "पछाडि" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "अगाडि" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "टाढाबाट हेर" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "नजिकबाट हेर्ने" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "पूरा चौडाई" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "सबै हेर्ने" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "वास्तविक परिमाण" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "पूरा स्कि्न" + +#~ msgid "Read Activity" +#~ msgstr "पढाई क्रियाकलाप " diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..952a05b --- /dev/null +++ b/po/nl.po @@ -0,0 +1,152 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: 2009-09-04 01:53-0400\n" +"Last-Translator: Myckel Habets <myckel@sdf.lonestar.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: nl\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "Lezen" + +#: readactivity.py:139 +msgid "Edit" +msgstr "Bewerken" + +#: readactivity.py:151 +msgid "View" +msgstr "Beeld" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "Kies document" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Annuleren" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Ok" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Titel</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Details</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Bladwijzer toegevoegd door %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Aantekeningen voor bladwijzer toevoegen: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "%s's bladwijzer" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "Bladwijzer voor pagina %d" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "Vorige" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "Volgende" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "Zoek eerste" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "Zoek vorige" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "Zoek volgende" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "Terug" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "Vorige pagina" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "Vorige bladwijzer" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "Vooruit" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "Volgende pagina" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "Volgende bladwijzer" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "Zoom uit" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "Zoom in" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "Zoom naar breedte" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "Zoom naar hele pagina" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "Werkelijk formaat" + +#: readtoolbar.py:508 +msgid "%" +msgstr "%" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "Schermvullend" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Pagina %i van %i" + +#~ msgid "Read Activity" +#~ msgstr "Lezen Activiteit" diff --git a/po/pa.po b/po/pa.po new file mode 100644 index 0000000..cc83252 --- /dev/null +++ b/po/pa.po @@ -0,0 +1,81 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/pap.po b/po/pap.po new file mode 100644 index 0000000..15aa235 --- /dev/null +++ b/po/pap.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-06-18 18:32-0400\n" +"Last-Translator: Urso Wieske <uwieske@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Lesa" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Edita" + +#: readactivity.py:103 +msgid "View" +msgstr "Mira" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Anterior" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Sigiente" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Buska promé" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Buska anterior" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Buska sigiente" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Bèk" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Avansa" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Zoom out" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Zoom in" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Agusta e hanchura" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Zoom pa fit" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Size aktual" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Pantaya kompleto" diff --git a/po/pis.po b/po/pis.po new file mode 100644 index 0000000..840ef9f --- /dev/null +++ b/po/pis.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:103 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..4a00053 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-11-28 15:49+0000\n" +"Last-Translator: Wiktor Idzikowski <wiktor.idzikowski@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +#, fuzzy +msgid "Read Activity" +msgstr "Czytanka" + +#: readactivity.py:99 +msgid "View" +msgstr "Widok" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Wstecz" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Dalej" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Poprzedni" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Następny" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Czytaj" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Edytuj" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Zmniejsz" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Powiększ" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Dopasuj do szerokości" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Dopasuj" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Aktualny rozmiar" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/ps.po b/po/ps.po new file mode 100644 index 0000000..32c18fe --- /dev/null +++ b/po/ps.po @@ -0,0 +1,80 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-04 13:32+0000\n" +"Last-Translator: usman mansoor ansari <jalalkut@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "لوستل" + +#: readactivity.py:91 +msgid "Edit" +msgstr "اېډېټ" + +#: readactivity.py:99 +msgid "View" +msgstr "ليد" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "مخكنى" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "بل" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "لومړى وموندئ" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "مخكنى موندنه" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "بل موندنه" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "شا" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "مخته" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "لوكمول" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "لوډېرول" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "پسور پورې لوى كړئ" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "اسلولو پورې لوى كړئ" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "آر كچه" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" diff --git a/po/pseudo.po b/po/pseudo.po new file mode 100644 index 0000000..de8db6d --- /dev/null +++ b/po/pseudo.po @@ -0,0 +1,70 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-11-17 20:52+0100\n" +"PO-Revision-Date: 2007-11-21 03:27+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: activity/activity.info:2 readactivity.py:84 +msgid "Read" +msgstr "[ﻛ օƵј Јձ]ЯєаԺ" + +#: readactivity.py:80 +msgid "Edit" +msgstr "[бВ أ ҍ]モԺآҭ" + +#: readactivity.py:88 +msgid "View" +msgstr "[ҍﺳ آڑ ڃ ]Ѵїещ" + +#: readtoolbar.py:60 +msgid "Previous" +msgstr "[ҁ щЦքЎղИҕٲБФҏ]Ряэմւօцی" + +#: readtoolbar.py:67 +msgid "Next" +msgstr "[Ҳе я ԳՕङ]Иչҳт" + +#: readtoolbar.py:105 +msgid "Back" +msgstr "[حҟҵ ѓĐսՅ]Ъձҫќ" + +#: readtoolbar.py:112 +msgid "Forward" +msgstr "[П խەъչگ Ƶu ۦԼѓप]ҒюяաаяԺ" + +#: readtoolbar.py:207 +msgid "Zoom out" +msgstr "[ГڑЂтĐҺ ԃワ ўэж ]Ƶююм юцե" + +#: readtoolbar.py:213 +msgid "Zoom in" +msgstr "[مҲЎƵﻻ є ТԿճո ]Ƶююм آи" + +#: readtoolbar.py:219 +msgid "Zoom to width" +msgstr "[ङдЌuщԲ ﻠҢЈ ќՄपճўՓՑ Їս]Żюօм ٲօ шїժեप" + +#: readtoolbar.py:225 +msgid "Zoom to fit" +msgstr "[АФЊ щհ ԿԿ թ Չц ٮմキ]Żююм тю ғւե" + +#: readtoolbar.py:230 +msgid "Actual size" +msgstr "[ҟ ЍјШ آчڈ ғ վƵТщкЄ]Дۦтцдլ یﻨƶэ" + +#: readtoolbar.py:248 +msgid "%" +msgstr "[Жک ]%" + diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..ad06380 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,162 @@ +# Portuguese translations for PACKAGE package. +# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Tomeu Vizoso <tomeu@tomeuvizoso.net>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2009-09-18 11:32-0400\n" +"Last-Translator: Eduardo H. Silva <HoboPrimate@gmail.com>\n" +"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n" +"Language: pt\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Ler" + +#: readactivity.py:330 +msgid "Back" +msgstr "Voltar" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Página anterior" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Marcador anterior" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Avançar" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Página seguinte" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Marcador seguinte" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Escolhe o documento" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Cancelar" + +#: readdialog.py:55 +msgid "Ok" +msgstr "Ok" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Título</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Detalhes</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Marcador adicionado por %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Adiciona notas para o marcador: " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "Marcador de %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "Marcador para a página %d" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Anterior" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Seguinte" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Encontrar o primeiro" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Encontrar o anterior" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Encontrar o próximo" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Afastar zoom" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Aproximar zoom" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Zoom até à largura" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Zoom até caber" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Tamanho real" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Ecrã completo" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Página %i de %i" + +#~ msgid "Edit" +#~ msgstr "Editar" + +#~ msgid "View" +#~ msgstr "Ver" + +#~ msgid "Read Activity" +#~ msgstr "Actividade Ler" + +#~ msgid "Open a document to read" +#~ msgstr "Abrir um documento para o ler" + +#~ msgid "All supported formats" +#~ msgstr "Todos os formatos suportados" + +#~ msgid "All files" +#~ msgstr "Todos os ficheiros" + +#~ msgid "Open" +#~ msgstr "Abrir" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..099f6b7 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,85 @@ +# translation of pt_BR.po to Brazilian Portuguese +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Diego Búrigo Zacarão <diegobz@gmail.com>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: pt_BR\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-01-19 11:07+0000\n" +"Last-Translator: Eduardo H. Silva <HoboPrimate@gmail.com>\n" +"Language-Team: Brazilian Portuguese <fedora-docs-br@redhat.com>\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-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Ler" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Editar" + +#: readactivity.py:99 +msgid "View" +msgstr "Ver" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Anterior" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Próxima" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Voltar" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Ir adiante" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Diminuir zoom" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Aumentar zoom" + +# baseado na tradução que tenho do Evince +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Ajustar à largura" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Melhor ajuste" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Tamanho real" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#~ msgid "Read Activity" +#~ msgstr "Ler a Atividade" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Buscar Primeiro" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Buscar Anterior" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Buscar Próximo" diff --git a/po/qu.po b/po/qu.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/qu.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..1787a44 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-11-22 23:46+0000\n" +"Last-Translator: Adi Roiban <adiroiban@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "Activitate de citire" + +#: readactivity.py:99 +msgid "View" +msgstr "Vizualizare" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Înapoi" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Înainte" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Anterior" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Următor" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Citește" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Modifică" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Micește lupa" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Mărește lupa" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Potrivește în lățime" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Potrivește în întregime" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Mărime actuală" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..cecfdd5 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-11-24 11:24+0000\n" +"Last-Translator: Maxim Osipov <maxim.osipov@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "Активность Чтение" + +#: readactivity.py:99 +msgid "View" +msgstr "Просмотреть" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Назад" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Вперед" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Предыдущий" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Следующий" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "Читать" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Редактировать" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "Увеличить" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "Уменьшить" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "Масштабировать по ширине" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "Масштабировать по размеру" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "Оригинальный размер" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/rw.po b/po/rw.po new file mode 100644 index 0000000..8ae8968 --- /dev/null +++ b/po/rw.po @@ -0,0 +1,86 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-07-31 12:01+0200\n" +"Last-Translator: GASHAYIJA Guillaume <gashayija2002@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: activity/activity.info:2 +#: readactivity.py:95 +msgid "Read" +msgstr "Soma" + +#: readactivity.py:91 +msgid "Edit" +msgstr "Hindura" + +#: readactivity.py:103 +msgid "View" +msgstr "Irebero" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Ibibanziriza" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Ibikurikira" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Shaka mbere" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Shaka Ibibanziriza" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Shaka ibikurikira" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Inyuma" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Imbere" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Kwagura" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Kugabanya" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Agura ukigira kigari" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Agura ikntu ugira ngo gikwire ahantu" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Ingano nyayo" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Ekarayose" + diff --git a/po/sd.po b/po/sd.po new file mode 100644 index 0000000..5c1e346 --- /dev/null +++ b/po/sd.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-05-01 09:26-0400\n" +"Last-Translator: Naveed <sulmanminhas@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "read" + +#: readactivity.py:91 +msgid "Edit" +msgstr "edit" + +#: readactivity.py:103 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/si.po b/po/si.po new file mode 100644 index 0000000..2cf1ab3 --- /dev/null +++ b/po/si.po @@ -0,0 +1,80 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2008-02-15 06:52-0500\n" +"Last-Translator: Hayesha Somarathne <hayeshais@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "කියවන්න" + +#: readactivity.py:91 +msgid "Edit" +msgstr "සංස්කරණය කරන්න" + +#: readactivity.py:99 +msgid "View" +msgstr "දර්ශනය කරන්න" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "පෙර" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "ඊලඟ" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "පලමුව සොයන්න" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "පෙර එක සොයන්න" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "ඊලඟ එක සොයන්න" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "පසුපසට" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "ඉදිරියට" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "කුඩා කරන්න" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "විශාල කරන්න" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "පළල තෙක් විශාලනය" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "ගැලපීමට විශාලනය" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "සත්ය විශාලත්වය හෝ නියම විශාලත්වය" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..94ab47d --- /dev/null +++ b/po/sl.po @@ -0,0 +1,88 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2008-12-08 08:47-0500\n" +"Last-Translator: Denis Oštir <denis.ostir@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "Beri" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Urejanje" + +#: readactivity.py:137 +msgid "View" +msgstr "Pogled" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "Izberi dokument" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Prejšnji" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Naslednji" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Najdi prvega" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Najdi prejšnjega" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Najdi naslednjega" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Nazaj" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Naprej" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Povečaj" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Pomanjšaj" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Povečaj do širine" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Povečaj da ustreza" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Normalna velikost" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Cel zaslon" diff --git a/po/sq.po b/po/sq.po new file mode 100644 index 0000000..f099bf7 --- /dev/null +++ b/po/sq.po @@ -0,0 +1,148 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "" + +#: readactivity.py:139 +msgid "Edit" +msgstr "" + +#: readactivity.py:151 +msgid "View" +msgstr "" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:508 +msgid "%" +msgstr "" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..e4df3a1 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,88 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: 2009-01-03 18:25-0500\n" +"Last-Translator: Nicci Manns <nicci@saunalahti.fi>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "Läs" + +#: readactivity.py:125 +msgid "Edit" +msgstr "Redigera" + +#: readactivity.py:137 +msgid "View" +msgstr "Visa" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "Välj dokument" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "Föregående" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "Nästa" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "Sök första" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "Sök föregående" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "Sök nästa" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "Tillbaka" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "Framåt" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "Zooma ut" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "Zooma in" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "Anpassa till bredd" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "Bästa anpassning" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "Verklig storlek" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "Helskärm" diff --git a/po/sw.po b/po/sw.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/sw.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/ta.po b/po/ta.po new file mode 100644 index 0000000..3bc0389 --- /dev/null +++ b/po/ta.po @@ -0,0 +1,151 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: 2009-08-28 03:55-0400\n" +"Last-Translator: Emilianuspillai Amirthanathan Gnanaseelan " +"<gnanaseelan2001@yahoo.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ta\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "வாசி" + +#: readactivity.py:139 +msgid "Edit" +msgstr "திருத்து" + +#: readactivity.py:151 +msgid "View" +msgstr "பார்வையிடு" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "ஆவணத்தை தெரிவுசெய்" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "இரத்துசெய்" + +#: readdialog.py:55 +msgid "Ok" +msgstr "எல்லாம் சரி" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Title</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Details</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" +"புத்தகக் குறி %(பாவனையாளரினால்)களினால் % (தரம்)ங்கள் சேர்க்கப்பட்டுள்ளது" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "புத்தகக் குறிக்கு குறிப்புக்களை சேர்க்க:_" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "% ல் புத்தகக் குறி" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "பக்கத்திற்கான புத்தகக் குறி %" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "முன்னைய" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "அடுத்தது" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "முதலாவதை கண்டுபிடி" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "முன்னையதை கண்டுபிடி" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "அடுத்தததை கண்டுபிடி" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "பின்னோக்கி அனுப்பு" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "முதற்பக்கம்" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "முன்னைய புத்தகக்குறி " + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "முன்னோக்கி அனுப்பு" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "அடுத்த பக்கம்" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "அடுத்த புத்தகக்குறி " + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "சிறிதாக்கிக் காட்டு" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "பெரிதாக்கிக் காட்டு" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "அகலதிற்கு ஏற்றவாறு பெரிதாக்கு" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "பொருந்துமாறு பெரிதாக்கு" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "சரியான அளவு" + +#: readtoolbar.py:508 +msgid "%" +msgstr "%" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "முழுத்திரை" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "பக்கத்தின் %" diff --git a/po/te.po b/po/te.po new file mode 100644 index 0000000..58abd47 --- /dev/null +++ b/po/te.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-05-17 11:48+0100\n" +"Last-Translator: Satyanarayana Murthy Saladi <saladism@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "చదువు" + +#: readactivity.py:91 +msgid "Edit" +msgstr "కూర్చు" + +#: readactivity.py:103 +msgid "View" +msgstr "చూడు" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "ముందుది" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "తర్వాతది" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "మొదటిది వెతుకు" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "ముందుది వెతుకు" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "తర్వాతది వెతుకు" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "వెనుకకు" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "ముందుకు" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "దూరంచేసి చూడు" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "దగ్గరచేసి చూడు" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "పూర్తివెడల్పుగా చూడు" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "అంతా కనపడేలా చూడు" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "అసలు కొలత" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "తెరనిండుగా" diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..92e48fe --- /dev/null +++ b/po/th.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-12-10 04:23+0000\n" +"Last-Translator: Manatsawin <manatsawin@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "กิจกรรมอ่าน" + +#: readactivity.py:99 +msgid "View" +msgstr "มุมมอง" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "กลับ" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "ถัดไป" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "ก่อนหน้า" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "ถัดไป" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "อ่าน" + +#: readactivity.py:91 +msgid "Edit" +msgstr "แก้ไข" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "ขยายออก" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "ขยายเข้า" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "ขยายเต็มความกว้าง" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "ขยายพอดี" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "ขนาดเท่าจริง" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/tpi.po b/po/tpi.po new file mode 100644 index 0000000..840ef9f --- /dev/null +++ b/po/tpi.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readactivity.py:103 +msgid "View" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..d6e176a --- /dev/null +++ b/po/tr.po @@ -0,0 +1,84 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-08-26 10:35-0400\n" +"Last-Translator: abdullah kocabas <abdullah.kocabas@abcdizustu.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "okumak" + +#: readactivity.py:91 +msgid "Edit" +msgstr "düzenlemek" + +#: readactivity.py:103 +msgid "View" +msgstr "görünüm" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "önceki" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "ileri" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "ilkini bulunuz." + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "öncekini bulunuz." + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "sonrakini bulunuz." + +#: readtoolbar.py:160 +msgid "Back" +msgstr "geri" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "ileri" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "uzaklaştırmak" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "büyütmek" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "enine büyütünüz." + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "boyuna büyütünüz." + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "gerçek boyut" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "tam ekran" diff --git a/po/tvl.po b/po/tvl.po new file mode 100644 index 0000000..a5f63b4 --- /dev/null +++ b/po/tvl.po @@ -0,0 +1,140 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "" + +#: readactivity.py:330 +msgid "Back" +msgstr "" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "" + +#: readactivity.py:346 +msgid "Forward" +msgstr "" + +#: readactivity.py:349 +msgid "Next page" +msgstr "" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:227 +msgid "%" +msgstr "" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/tzo.po b/po/tzo.po new file mode 100644 index 0000000..f099bf7 --- /dev/null +++ b/po/tzo.po @@ -0,0 +1,148 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-06 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\n" + +#: activity/activity.info:2 readactivity.py:143 +msgid "Read" +msgstr "" + +#: readactivity.py:139 +msgid "Edit" +msgstr "" + +#: readactivity.py:151 +msgid "View" +msgstr "" + +#: readactivity.py:241 +msgid "Choose document" +msgstr "" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "" + +#: readdialog.py:55 +msgid "Ok" +msgstr "" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "" + +#: readtoolbar.py:91 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:98 +msgid "Next" +msgstr "" + +#: readtoolbar.py:184 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:190 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:192 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:205 +msgid "Back" +msgstr "" + +#: readtoolbar.py:208 +msgid "Previous page" +msgstr "" + +#: readtoolbar.py:211 +msgid "Previous bookmark" +msgstr "" + +#: readtoolbar.py:221 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:224 +msgid "Next page" +msgstr "" + +#: readtoolbar.py:227 +msgid "Next bookmark" +msgstr "" + +#: readtoolbar.py:468 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:474 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:480 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:486 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:491 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:508 +msgid "%" +msgstr "" + +#: readtoolbar.py:521 +msgid "Fullscreen" +msgstr "" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "" diff --git a/po/ug.po b/po/ug.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/ug.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/ur.po b/po/ur.po new file mode 100644 index 0000000..e6b28d0 --- /dev/null +++ b/po/ur.po @@ -0,0 +1,87 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-01 00:30-0500\n" +"PO-Revision-Date: 2008-03-19 05:07-0400\n" +"Last-Translator: salman minhas <sulmanminhas@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "پڑهیں" + +#: readactivity.py:91 +msgid "Edit" +msgstr "تدوین" + +#: readactivity.py:103 +msgid "View" +msgstr "نظارہ" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "پچھلا" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "اگلا" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "پہلا ڈھونڈیں" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "پچھلا ڈھونڈیں" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "اگلا ڈھونڈیں" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "واپس" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "آگے" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "باہر زوم کریں" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "اندر زوم کریں" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "چوڑائی تک زوم کریں" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "فٹ کرنے کے لیے زوم کریں" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "اصل سائز" + +#: readtoolbar.py:312 +msgid "%" +msgstr "%" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "پوری سکرين" + +#~ msgid "Read Activity" +#~ msgstr "پرھنے کی سرگرمی" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..7c181d4 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,147 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2009-09-24 10:44-0400\n" +"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: vi\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "Đọc" + +#: readactivity.py:330 +msgid "Back" +msgstr "Lùi" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "Trang trước" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "Liên kết lưu trước" + +#: readactivity.py:346 +msgid "Forward" +msgstr "Tiếp" + +#: readactivity.py:349 +msgid "Next page" +msgstr "Trang sau" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "Liên kết lưu sau" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "Chọn tài liệu" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "Thôi" + +#: readdialog.py:55 +msgid "Ok" +msgstr "OK" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>Tên</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>Chi tiết</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "Liên kết được lưu bởi %(user)s %(time)s" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "Ghi chú về liên kết lưu : " + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "Liên kết lưu của %s" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "Liên kết lưu đến trang %d" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "Lùi" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "Tiếp" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "Tìm mục đầu" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "Tìm trước" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "Tìm tiếp" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "Thu nhỏ" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "Phóng to" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "Phóng tới bề rộng" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "Phóng vừa" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "Kích cỡ thật" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "Toàn màn hình" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "Trang %i trên %i" + +#~ msgid "Edit" +#~ msgstr "Sửa" + +#~ msgid "View" +#~ msgstr "Xem" diff --git a/po/wa.po b/po/wa.po new file mode 100644 index 0000000..d797e12 --- /dev/null +++ b/po/wa.po @@ -0,0 +1,89 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-09 00:31-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\n" + +#: activity/activity.info:2 readactivity.py:129 +msgid "Read" +msgstr "" + +#: readactivity.py:125 +msgid "Edit" +msgstr "" + +#: readactivity.py:137 +msgid "View" +msgstr "" + +#: readactivity.py:223 +msgid "Choose document" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:271 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:277 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:283 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:289 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:294 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:312 +msgid "%" +msgstr "" + +#: readtoolbar.py:330 +msgid "Fullscreen" +msgstr "" diff --git a/po/yo.po b/po/yo.po new file mode 100644 index 0000000..328f81a --- /dev/null +++ b/po/yo.po @@ -0,0 +1,85 @@ +# 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 <EMAIL@ADDRESS>, YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.0.1\n" + +#: XbookActivity.py:49 XbookActivity.py:140 +msgid "Read Activity" +msgstr "" + +#: readactivity.py:99 +msgid "View" +msgstr "" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "" + +#: readactivity.py:91 +msgid "Edit" +msgstr "" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "" + +#: readtoolbar.py:303 +msgid "%" +msgstr "" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..4d2e089 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,76 @@ +msgid "" +msgstr "" +"Project-Id-Version: OLPC XBook\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-12-23 20:36+0000\n" +"PO-Revision-Date: 2007-12-25 04:05+0000\n" +"Last-Translator: Subo Dong <dsbalex@gmail.com>\n" +"Language-Team: Yuan CHAO <yuanchao@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\n" + +#: activity/activity.info:2 readactivity.py:95 +msgid "Read" +msgstr "阅读" + +#: readactivity.py:91 +msgid "Edit" +msgstr "编辑" + +#: readactivity.py:99 +msgid "View" +msgstr "查看" + +#: readtoolbar.py:67 +msgid "Previous" +msgstr "上一个" + +#: readtoolbar.py:74 +msgid "Next" +msgstr "下一个" + +#: readtoolbar.py:160 +msgid "Back" +msgstr "上一页" + +#: readtoolbar.py:167 +msgid "Forward" +msgstr "下一页" + +#: readtoolbar.py:262 +msgid "Zoom out" +msgstr "缩小" + +#: readtoolbar.py:268 +msgid "Zoom in" +msgstr "放大" + +#: readtoolbar.py:274 +msgid "Zoom to width" +msgstr "最适宽度" + +#: readtoolbar.py:280 +msgid "Zoom to fit" +msgstr "页面大小" + +#: readtoolbar.py:285 +msgid "Actual size" +msgstr "实际大小" + +#: readtoolbar.py:303 +msgid "%" +msgstr "%" + +#: readtoolbar.py:140 +msgid "Find first" +msgstr "寻找第一个" + +#: readtoolbar.py:146 +msgid "Find previous" +msgstr "寻找前一个" + +#: readtoolbar.py:148 +msgid "Find next" +msgstr "寻找下一个" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..45d656d --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,143 @@ +msgid "" +msgstr "" +"Project-Id-Version: OLPC XBook\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-09 00:33-0400\n" +"PO-Revision-Date: 2009-10-11 20:11-0400\n" +"Last-Translator: Yuan Chao <yuanchao@gmail.com>\n" +"Language-Team: Yuan CHAO <yuanchao@gmail.com>\n" +"Language: zh_TW\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-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Read" +msgstr "閱讀" + +#: readactivity.py:330 +msgid "Back" +msgstr "後退" + +#: readactivity.py:333 +msgid "Previous page" +msgstr "上一頁" + +#: readactivity.py:336 +msgid "Previous bookmark" +msgstr "上一個書籤" + +#: readactivity.py:346 +msgid "Forward" +msgstr "前進" + +#: readactivity.py:349 +msgid "Next page" +msgstr "下一頁" + +#: readactivity.py:352 +msgid "Next bookmark" +msgstr "下一個書籤" + +#: readactivity.py:537 +msgid "Choose document" +msgstr "選擇文件" + +#: readdialog.py:49 +msgid "Cancel" +msgstr "取消" + +#: readdialog.py:55 +msgid "Ok" +msgstr "確定" + +#: readdialog.py:109 +msgid "<b>Title</b>:" +msgstr "<b>標題</b>:" + +#: readdialog.py:136 +msgid "<b>Details</b>:" +msgstr "<b>詳細說明</b>:" + +#. TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated +#. TRANS: automatically) +#: readsidebar.py:83 +#, python-format +msgid "Bookmark added by %(user)s %(time)s" +msgstr "書籤由 %(user)s 於 %(time)s 加入" + +#: readsidebar.py:124 readsidebar.py:164 +msgid "Add notes for bookmark: " +msgstr "增加書籤註解:" + +#: readsidebar.py:161 +#, python-format +msgid "%s's bookmark" +msgstr "%s 的書籤" + +#: readsidebar.py:162 +#, python-format +msgid "Bookmark for page %d" +msgstr "第 %d 頁加入書籤" + +#: readtoolbar.py:64 +msgid "Previous" +msgstr "上一個" + +#: readtoolbar.py:71 +msgid "Next" +msgstr "下一個" + +#: readtoolbar.py:157 +msgid "Find first" +msgstr "搜尋第一個" + +#: readtoolbar.py:163 +msgid "Find previous" +msgstr "搜尋前一個" + +#: readtoolbar.py:165 +msgid "Find next" +msgstr "搜尋下一個" + +#: readtoolbar.py:187 +msgid "Zoom out" +msgstr "縮小" + +#: readtoolbar.py:193 +msgid "Zoom in" +msgstr "放大" + +#: readtoolbar.py:199 +msgid "Zoom to width" +msgstr "最適寬度" + +#: readtoolbar.py:205 +msgid "Zoom to fit" +msgstr "頁面大小" + +#: readtoolbar.py:210 +msgid "Actual size" +msgstr "實際大小" + +#: readtoolbar.py:227 +msgid "%" +msgstr "%" + +#: readtoolbar.py:240 +msgid "Fullscreen" +msgstr "全螢幕顯示" + +#. TRANS: Translate this as Page i of m (eg: Page 4 of 334) +#: readtopbar.py:201 +#, python-format +msgid "Page %i of %i" +msgstr "第 %i 頁 共 %i 頁" + +#~ msgid "Edit" +#~ msgstr "編輯" + +#~ msgid "View" +#~ msgstr "檢視" diff --git a/readdb.py b/readdb.py new file mode 100644 index 0000000..33571ae --- /dev/null +++ b/readdb.py @@ -0,0 +1,881 @@ +# Copyright 2009 One Laptop Per Child +# Author: Andreas Gros <info@andreasgros.net>, Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import os, os.path +import shutil +import sqlite3 +import time +import gconf +import cjson +import urllib, urllib2 +import re +from xml.dom import minidom +from sugar.datastore import datastore +from sugar import mime +from annobookmark import AnnoBookmark, Bookmark + + +_logger = logging.getLogger('anno-activity') + +def _init_db(): + dbdir = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data') + dbpath = os.path.join(dbdir, 'anno_v1.db') + olddbpath = os.path.join(dbdir, 'anno.db') + + srcpath = os.path.join(os.environ['SUGAR_BUNDLE_PATH'], 'anno_v1.db') + + #Situation 0: Db is existent + if os.path.exists(dbpath): + return dbpath + + #Situation 1: DB is non-existent at all + if not os.path.exists(dbpath) and not os.path.exists(olddbpath): + try: + os.makedirs(dbdir) + except: + pass + shutil.copy(srcpath, dbpath) + return dbpath + + #Situation 2: DB is outdated + if not os.path.exists(dbpath) and os.path.exists(olddbpath): + shutil.copy(olddbpath, dbpath) + + conn = sqlite3.connect(dbpath) + conn.execute("CREATE TABLE temp_bookmarks AS SELECT md5, page, 'content', timestamp, user, color, local FROM bookmarks") + conn.execute("ALTER TABLE bookmarks RENAME TO bookmarks_old") + conn.execute("ALTER TABLE temp_bookmarks RENAME TO bookmarks") + conn.execute("DROP TABLE bookmarks_old") + + #conn.execute("DROP TABLE annotations") + conn.execute("CREATE TABLE annotations (id INTEGER PRIMARY KEY, md5, page, title, content, bodyurl, context, created TIMESTAMP, modified TIMESTAMP, creator, annotates, rdf, color, local, mimetype, uuid, annotationurl, bodysvg)") + conn.execute("CREATE TABLE annuserid (username, userid)") + conn.commit() + + conn.close() + return dbpath + + # Should not reach this point + return None + +class BookmarkManager: + def __init__(self, filehash): + self._filehash = filehash + + dbpath = _init_db() + + assert dbpath != None + + self._conn = sqlite3.connect(dbpath) + self._conn.text_factory = lambda x: unicode(x, "utf-8", "ignore") + + self._bookmarks = [] + self._populate_bookmarks() + + def add_bookmark(self, page, content, local=1): + # locale = 0 means that this is a bookmark originally + # created by the person who originally shared the file + timestamp = time.time() + client = gconf.client_get_default() + user = client.get_string("/desktop/sugar/user/nick") + color = client.get_string("/desktop/sugar/user/color") + + t = (self._filehash, page, content, timestamp, user, color, local) + self._conn.execute('insert into bookmarks values (?, ?, ?, ?, ?, ?, ?)', t) + self._conn.commit() + + self._resync_bookmark_cache() + + + + def del_bookmark(self, page): + client = gconf.client_get_default() + user = client.get_string("/desktop/sugar/user/nick") + + # We delete only the locally made bookmark + + t = (self._filehash, page, user) + self._conn.execute('delete from bookmarks where md5=? and page=? and user=?', t) + self._conn.commit() + + self._resync_bookmark_cache() + + def _populate_bookmarks(self): + # TODO: Figure out if caching the entire set of bookmarks is a good idea or not + rows = self._conn.execute('select * from bookmarks where md5=? order by page', (self._filehash,)) + + for row in rows: + self._bookmarks.append(Bookmark(row)) + + def get_bookmarks_for_page(self, page): + bookmarks = [] + for bookmark in self._bookmarks: + if bookmark.belongstopage(page): + bookmarks.append(bookmark) + + return bookmarks + + def _resync_bookmark_cache(self): + # To be called when a new bookmark has been added/removed + self._bookmarks = [] + self._populate_bookmarks() + + + def get_prev_bookmark_for_page(self, page, wrap = True): + if not len(self._bookmarks): + return None + + if page <= self._bookmarks[0].page and wrap: + return self._bookmarks[-1] + else: + for i in range(page-1, -1, -1): + for bookmark in self._bookmarks: + if bookmark.belongstopage(i): + return bookmark + + return None + + + def get_next_bookmark_for_page(self, page, wrap = True): + if not len(self._bookmarks): + return None + + if page >= self._bookmarks[-1].page and wrap: + return self._bookmarks[0] + else: + for i in range(page+1, self._bookmarks[-1].page + 1): + for bookmark in self._bookmarks: + if bookmark.belongstopage(i): + return bookmark + + return None + + +#///////////////////////////////////// +#working on: upon update of an annotation, all annotations are deleted and new one's created => needs to be fixed + +class AnnotationManager: + #Namespaces + #cnt http://www.w3.org/2008/content# Content in RDF [Content] + #dc http://purl.org/dc/elements/1.1/ Dublin Core elements [DC Elements] + #dcterms http://purl.org/dc/terms/ Dublin Core terms [DC Terms] + #foaf http://xmlns.com/foaf/0.1/ Friend of a Friend vocabulary terms [FOAF] + #oac http://www.openannotation.org/ns/ OAC vocabulary terms [OAC] + #ore http://www.openarchives.org/ore/terms/ ORE vocabulary terms + #rdf http://www.w3.org/1999/02/22-rdf-syntax-ns# RDF vocabulary terms [RDF Vocabulary] + #rdfs http://www.w3.org/2001/01/rdf-schema# RDF Schema vocabulary [RDF Vocabulary] + #bibo http://purl.org/ontology/bibo/ Bibliographic vocabulary + #oac:Annotation http://www.openannotation.org/ns/Annotation + #oac:hasTarget http://www.openannotation.org/ns/hasTarget + #oac:hasBody http://www.openannotation.org/ns/hasBody + #oac:Target http://www.openannotation.org/ns/Target + #oac:Body http://www.openannotation.org/ns/Body + + + def __init__(self, filehash, mimetype, sidebar): + self._sidebar = sidebar + self.current_annotation = None + self._userid = '' + self._filehash = filehash + self._uuid = filehash + self._mimetype = mimetype + self._annotitle = '' + self._content = '' + self._color = '' + self._local = '' + self._annotations = [] + self._fileformat = 'image/svg+xml' + self._annotates = '' + self._creator = '' + self._created = '' + self._annotationurl = '' + self._bodyurl = '' + self._annotates = '' + self._context = '' + self._modified = '' + self._bodysvg = '' + self._id = '' + self._rdf = '' + self.modifiedtolerance = 10 + #self._annotationserver='http://localhost/wordpress/wp-content/plugins/annotation/annotation.php' + self._annotationserver='http://www.andreasgros.net/wp-content/plugins/annotation/annotation.php' + self.get_etext_url() + self._to_delete = [] + dbpath = _init_db() + + assert dbpath != None + + self._conn = sqlite3.connect(dbpath) + self._conn.text_factory = lambda x: unicode(x, 'utf-8', 'ignore') + self._annotations = [] + self._populate_annotations() + + + def parse_userid(self, rdf): + userid = '' + dom = minidom.parseString(rdf) + userid = self.get_node_data(dom.getElementsByTagName("dcterms:identifier")[0]) + _logger.debug('got this userid from the server: %s' % userid) + return userid + + + def get_userid_for_username(self, user): + userid = '' + rows = self._conn.execute('select userid from annuserid where username=?', (user, )) + if ( rows != None ): + r = rows.fetchone() + if r != None: + userid = r[0] + else: + url = self._annotationserver + values = {'getidforuser' : user} + try: + data = urllib.urlencode(values) + req = urllib2.Request(url, data) + response = urllib2.urlopen(req) + rdf = response.read() + _logger.debug("\n\ngot this userid rdf %s\n\n" % rdf) + userid = self.parse_userid(rdf) + _logger.debug("\nuserid is %s\n\n" % userid) + except Exception, detail: + _logger.debug("userid fetching failed; detail: %s ", detail) + self._conn.execute('insert into annuserid values (?, ?)', (user, userid)) + self._conn.commit() + return userid + + + def add_annotation(self, page, content, local=1): + # locale = 0 means that this is a bookmark originally + # created by the person who originally shared the file + self._created = time.time() + self._modified = self._created + client = gconf.client_get_default() + user = client.get_string("/desktop/sugar/user/nick") + color = client.get_string("/desktop/sugar/user/color") + + if self._userid == '': + self._userid = self.get_userid_for_username(user) + + note = cjson.decode(content) + self._annotitle = note['title'] + self._content = note['body'] + self._creator = self._userid + + _logger.debug('add_annotation content %s', self._content) + _logger.debug('annotation annotates %s', self._annotates) + #check what the url of the book is + #store annotation locally + #send annotation to server -> get url back, store url in body-url + #update annotation body url in local db + + #url of the book? + #alter getBooks activity to add url to downloaded books' journal entry + #GetIABooksActivity.py + self._bodysvg = self.assembleSVG(self._annotitle, self._content) + + #check the last id from the database store + row = self._conn.execute('select id from annotations where md5=? order by id desc limit 1', [self._filehash]) + aid = 0 + r = row.fetchone() + if r != None: + aid = int(r[0]) + 1 + + t = (aid, self._filehash, page, self._annotitle, self._content, self._bodyurl, self._context, self._created, self._modified, self._userid, self._annotates, '', self._color, self._local, self._mimetype, None, None, self._bodysvg) + annotation = AnnoBookmark(t) + + self._rdf = self.create_rdf_representation(annotation) + #conn.execute("CREATE TABLE annotations (id INTEGER PRIMARY KEY, md5, page, title, content, bodyurl, context, created, modified, creator, annotates, rdf, color, local, mimetype, uuid)") + + t = (aid, self._filehash, page, self._annotitle, self._content, self._bodyurl, self._context, self._created, self._modified, self._creator, self._annotates, self._rdf, self._color, self._local, self._mimetype, annotation.get_uuid(), None, self._bodysvg) + self._conn.execute('insert into annotations values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', t) + self._conn.commit() + self._resync_annotation_cache() + self.current_annotation = self._annotations[-1] + #self.sync_annotations() + + + + def edit_annotation(self, page, content, annotation_id, local=1): + # local = 0 means that this is a bookmark originally + # created by the person who originally shared the file + print 'edit annotation called' + note = cjson.decode(content) + annotitle = note['title'] + annocontent = note['body'] + + for a in self._annotations: + if a.get_id() == annotation_id: + a.set_modified(time.time()) + a.set_note_title(annotitle) + a.set_note_body(annocontent) + a.set_bodysvg(self.assembleSVG(annotitle, annocontent)) + a.set_rdf(self.create_rdf_representation(a)) + self.update_annotation_db_record(a) + break + + #self.sync_annotations() + + + + def del_annotation(self, annotation_id): + client = gconf.client_get_default() + user = client.get_string("/desktop/sugar/user/nick") + #get the clientuuid to schedule its deletion on the annotation server + rows = self._conn.execute('select uuid from annotations where md5=? and id=?', [self._filehash, annotation_id]) + row = rows.fetchone() + self._to_delete.append(row[0]) + _logger.debug(str('schedule %s for deletion' % row[0])) + # We delete only the locally made annotation + t = (self._filehash, annotation_id, self._userid) + self._conn.execute('delete from annotations where md5=? and id=? and creator=?', t) + self._conn.commit() + self._resync_annotation_cache() + + + + + def _populate_annotations(self): + # TODO: Figure out if caching the entire set of annotations is a good idea or not + rows = self._conn.execute('select id, md5, page, title, content, bodyurl, context, created, modified, creator, annotates, rdf, color, local, mimetype, uuid, annotationurl, bodysvg from annotations where md5=? order by page', [self._filehash]) + for row in rows: + self._annotations.append(AnnoBookmark(row)) + _logger.debug('picked %s', self._annotations[-1].get_note_body()) + _logger.debug('row content %s', row[4]) + #self.sync_annotations() + + + + def get_annotations_for_page(self, page): + annotations = [] + for annotation in self._annotations: + if annotation.belongstopage(page): + annotations.append(annotation) + return annotations + + + + def _resync_annotation_cache(self): + # To be called when a new bookmark has been added/removed + self._annotations = [] + self._populate_annotations() + + + + def get_pages_and_id_to_ann_map(self): + pages = {} + id_ann_map = {} + if len(self._annotations) == 0: + self._populate_annotations() + for a in self._annotations: + id_ann_map[a.id] = a + if a.page in pages.keys(): + pages[a.page].append(a.id) + else: + pages[a.page] = [a.id] + + _logger.debug('id_ann_map: %s' % str(id_ann_map)) + return pages, id_ann_map + + + def get_prev_annotation(self, page): + pages, id_ann_map = self.get_pages_and_id_to_ann_map() + pages_with_annotations = sorted(pages.keys()) + if not pages_with_annotations == None: + if self.current_annotation == None: + if not page in pages_with_annotations: + prevpages = [p for p in pages_with_annotations if p <= page] + if len(prevpages) > 0: + page = prevpages[-1] + else: + page = pages_with_annotations[-1] + self.current_annotation = id_ann_map[pages[page][0]] + t = pages[self.current_annotation.page] + tind = t.index(self.current_annotation.id) + if tind > 0: #prev annotation on the same page + self.current_annotation = id_ann_map[t[tind - 1]] + else: + self.current_annotation = id_ann_map[pages[pages_with_annotations[( pages_with_annotations.index(self.current_annotation.page) - 1 ) % len(pages_with_annotations)]][-1]] + return self.current_annotation + return None + + + def get_next_annotation(self, page): + pages, id_ann_map = self.get_pages_and_id_to_ann_map() + pages_with_annotations = sorted(pages.keys()) + _logger.debug('pages with annotations: %s' % str(pages_with_annotations)) + if not pages_with_annotations == None: + if self.current_annotation == None: + if not page in pages_with_annotations: + nextpages = [p for p in pages_with_annotations if p >= page] + if len(nextpages) > 0: + page = nextpages[0] + else: + page = pages_with_annotations[0] + self.current_annotation = id_ann_map[pages[page][0]] + t = pages[self.current_annotation.page] + _logger.debug('ids for current page %s' % str(t)) + tind = t.index(self.current_annotation.id) + if tind < len(t) - 1: #next annotation on the same page + self.current_annotation = id_ann_map[t[tind + 1]] + else: + self.current_annotation = id_ann_map[pages[pages_with_annotations[( pages_with_annotations.index(self.current_annotation.page) + 1 ) % len(pages_with_annotations)]][0]] + return self.current_annotation + return None + + + + + + def get_prev_annotation_for_page(self, page, wrap = True): + if not len(self._annotations): + return None + + if page <= self._annotations[0].page and wrap: + return self._annotations[-1] + else: + for i in range(page-1, -1, -1): + for annotation in self._annotations: + if annotation.belongstopage(i): + return annotation + + return None + + + + def get_next_annotation_for_page(self, page, wrap = True): + if not len(self._annotations): + return None + + if page >= self._annotations[-1].page and wrap: + return self._annotations[0] + else: + for i in range(page+1, self._annotations[-1].page + 1): + for annotation in self._annotations: + if annotation.belongstopage(i): + return annotation + + return None + + + + def get_node_data(self, domnode): + if domnode != None: + if domnode.firstChild != None: + return domnode.firstChild.data + return '' + + + def get_node_attribute(self, domnode, attributestr): + if ( domnode != None ) and ( attributestr in domnode.attributes.keys() ): + return domnode.attributes[attributestr].value + return '' + + + + def parse_annotations(self, rdf): + remote_annotations = [] + _logger.debug("parse_annotations: The RDF: %s", rdf) + dom = minidom.parseString(rdf) + annotations = dom.getElementsByTagName("oac:Annotation") + t1 = [] + t2 = [] + clientuuid = None + title = None + creator = None + page = None + created = None + annotates = None + contextabout = None + mimetype = None + contentnode = None + contentuuid = None + annourl = None + bodyurl = None + modified = None + + for annotationdomelement in annotations: + _logger.debug(str('\n\nparsing annotation dom element xml %s\n\n' % annotationdomelement.toxml() )) + clientuuid = annotationdomelement.attributes[u'rdf:about'].value + title = self.get_node_data(annotationdomelement.getElementsByTagName("dc:title")[0]) + creator = self.get_node_data(annotationdomelement.getElementsByTagName("dcterms:creator")[0]) + page = self.get_node_data(annotationdomelement.getElementsByTagName("bibo:pageStart")[0]) + if len(page) > 0: + page = int(page) + created = self.get_node_data(annotationdomelement.getElementsByTagName("oac:when")[0]) + created = self.makeTimeStampFromDateTimeString(created) + annotates = self.get_node_attribute(annotationdomelement.getElementsByTagName("oac:hasTarget")[0], "rdf:resource") + contextabout = self.get_node_attribute(annotationdomelement.getElementsByTagName("oac:contextAbout")[0], "rdf:resource") + mimetype = self.get_node_data(annotationdomelement.getElementsByTagName("dc:type")[0]) + context = self.get_node_attribute(annotationdomelement.getElementsByTagName("oac:Context")[0], "rdf:resource") + contentnodes = annotationdomelement.getElementsByTagName("oac:hasContent") + if ( contentnodes != None ) and ( len(contentnodes) > 0 ): + contentuuid = self.get_node_attribute(contentnodes[0], "rdf:about") + annourl = self.get_node_attribute(contentnodes[0].getElementsByTagName("rdf:type")[0], "rdf:resource") + bodyurl = self.get_node_data(contentnodes[0].getElementsByTagName("oac:body")[0]) + modified = self.get_node_data(annotationdomelement.getElementsByTagName("dcterms:modified")[0]) + modified = self.makeTimeStampFromDateTimeString(modified) + t1.append({'page' : page, 'bodyurl' : bodyurl, 'contextabout' : contextabout, 'created' : created, 'modified' : modified, 'creator' : creator, 'annotates' : annotates, 'mimetype' : mimetype, 'clientuuid' : clientuuid, 'annourl' : annourl }) + + descriptions = dom.getElementsByTagName("rdf:Description") + for desc in descriptions: + contentsvgnode = desc.getElementsByTagName("cnt:chars")[0] + contentsvg = contentsvgnode.toxml() + tspans = contentsvgnode.getElementsByTagName("svg:tspan") + notetitle = '' + notecontent = '' + for ts in tspans: + if ts.attributes["id"].value == 'notetitle': + notetitle = ts.firstChild.data + if ts.attributes["id"].value == 'notecontent': + notecontent = ts.firstChild.data + t2.append({'contentsvg' : contentsvg, 'notetitle' : notetitle, 'notecontent' : notecontent}) + if (len(t1) > 0) and (len(t1) == len(t2)): + for i in range(len(t1)): + remote_annotations.append(AnnoBookmark((None, self._filehash, t1[i]['page'], t2[i]['notetitle'], t2[i]['notecontent'], t1[i]['bodyurl'], t1[i]['contextabout'], t1[i]['created'], t1[i]['modified'], t1[i]['creator'], t1[i]['annotates'], '', '', '', t1[i]['mimetype'], t1[i]['clientuuid'], t1[i]['annourl'], t2[i]['contentsvg']))) + else: + _logger.debug('Parse annotation error: RDF parsing went wrong: %s' % rdf) + return remote_annotations + + + + def assemble_annotation(self, annotationdomelement): + _logger.debug("parse annotationdomelements %s ", annotationdomelement.toxml()) + #clientuuid = annotationdomelement.firstChild.attributes["rdf:about"] + #_logger.debug("parse annotationdomelements: uuid: %s", clientuuid) + #title = annotationdomelement.getElementsByTagName("dc:title")[0].firstChild.data + #_logger.debug("parse annotationdomelements: title: %s", title) + #creator = annotationdomelement.getElementsByTagName("dcterms:creator")[0].firstChild.data + #_logger.debug("parse annotationdomelements: creator: %s", creator) + #created = annotationdomelement.getElementsByTagName("oac:when")[0].firstChild.data + #_logger.debug("parse annotationdomelements: created: %s", created) + + + + + def get_annotationurl_from_server_response(self, rdf): + annotationurl = '' + dom = minidom.parseString(rdf) + urlnodes = dom.getElementsByTagName("rdf:Description") + if ( urlnodes != None ): + node = urlnodes[0] + if "rdf:about" in node.attributes.keys(): + annotationurl = node.attributes["rdf:about"].value + return annotationurl + + + + #check for the uuid and pick the right one + def get_bodyurl_from_server_response(self, rdf): + bodyurl = '' + dom = minidom.parseString(rdf) + urlnodes = dom.getElementsByTagName("oac:body") + if ( urlnodes != None ): + node = urlnodes[0] + if "rdf:resource" in node.attributes.keys(): + bodyurl = node.attributes["rdf:resource"].value + return bodyurl + + + #check for the uuid and pick the right one + def get_modified_from_server_response(self, rdf): + modified = '' + dom = minidom.parseString(rdf) + modified = self.get_node_data(dom.getElementsByTagName("dcterms:modified")[0]) + if modified != None: + modified = self.makeTimeStampFromDateTimeString(modified) + return modified + + + + + def get_etext_url(self): + count = 0 + (results,count) = datastore.find({'mime_type' : ['application/epub+zip', 'application/pdf', mime.GENERIC_TYPE_TEXT]}, ['mime_type', 'checksum', 'description']) + if count > 0: + for r in results: + m = r.get_metadata() + if m['checksum'] == self._filehash: + if len(m['description']) > 0: + url = m['description'].lstrip('From: ') + self._annotates = url + _logger.debug('found url %s - self._annotates' % self._annotates) + + + + def insert_annotation_db_record(self, annotation): + t = (None, annotation.get_filehash(), annotation.get_page(), annotation.get_note_title(), annotation.get_note_body(), annotation.get_bodyurl(), annotation.get_context(), annotation.get_created(), annotation.get_modified(), annotation.get_creator(), annotation.get_annotates(), annotation.get_rdf(), annotation.get_color(), annotation.is_local(), annotation.get_mimetype(), annotation.get_uuid(), annotation.get_annotationurl(), annotation.get_bodysvg()) + self._conn.execute('insert into annotations values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', t) + self._conn.commit() + self.current_annotation = annotation + + + + def update_annotation_db_record(self, annotation): + t = (annotation.get_filehash(), annotation.get_page(), annotation.get_note_title(), annotation.get_note_body(), annotation.get_bodyurl(), annotation.get_context(), annotation.get_created(), annotation.get_modified(), annotation.get_creator(), annotation.get_annotates(), annotation.get_rdf(), annotation.get_color(), annotation.is_local(), annotation.get_mimetype(), annotation.get_uuid(), annotation.get_annotationurl(), annotation.get_bodysvg(), annotation.get_id()) + self._conn.execute('update annotations set md5=?, page=?, title=?, content=?, bodyurl=?, context=?, created=?, modified=?, creator=?, annotates=?, rdf=?, color=?, local=?, mimetype=?, uuid=?, annotationurl=?, bodysvg=? where id=?', t) + self._conn.commit() + self.current_annotation = annotation + + def makeDateTimeFromTimeStamp(self, tstamp): + return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(tstamp)) + + + def makeTimeStampFromDateTimeString(self, datetimestr): + return time.mktime(time.strptime(datetimestr, "%Y-%m-%d %H:%M:%S")) + + + def create_rdf_representation(self, annotation): + rstr = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" " + rstr += "xmlns:rdfs=\"http://www.w3.org/2001/01/rdf-schema#\" " + rstr += "xmlns:cnt=\"http://www.w3.org/2008/content\" " + rstr += "xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " + rstr += "xmlns:dcterms=\"http://purl.org/dc/terms/\" " + rstr += "xmlns:foaf=\"http://xmlns.com/foaf/0.1/\" " + rstr += "xmlns:oac=\"http://www.openannotation.org/ns/\" " + rstr += "xmlns:ore=\"http://www.openarchives.org/ore/terms/\" " + rstr += "xmlns:bibo=\"http://purl.org/ontology/bibo/\">" + + rstr += "<oac:Annotation rdf:about=\"" + annotation.get_uuid() + "\">" + rstr += "<bibo:pageStart>" + str(annotation.get_page()) + "</bibo:pageStart>" + rstr += "<dc:title>" + annotation.get_note_title() + "</dc:title>" + rstr += "<oac:hasTarget rdf:resource=\"" + annotation.get_annotates() + "\" dcterms:isPartOf=\"" + annotation.get_annotates() + "\"/>" + rstr += "<oac:hasTargetContext>" + rstr += "<oac:TargetContext>" + rstr += "<oac:contextAbout rdf:resource=\"" + annotation.get_annotates() + "\"/>" + rstr += "<dc:type>" + annotation.get_mimetype() + "</dc:type>" + rstr += "</oac:TargetContext>" + rstr += "</oac:hasTargetContext>" + + rstr += "<oac:hasContentContext>" + rstr += "<oac:Context rdf:resource=\"" + annotation.get_context() + "\">" + rstr += "<oac:contextAbout>" + rstr += annotation.get_annotates() + rstr += "</oac:contextAbout>" + rstr += '<oac:when>%s</oac:when>' % self.makeDateTimeFromTimeStamp(annotation.get_created()) + rstr += "</oac:Context>" + rstr += "</oac:hasContentContext>" + + rstr += "<rdf:type rdf:resource=\"http://www.w3.org/2000/10/annotation-ns#Annotation\"/>" + rstr += "<oac:predicate rdf:resource=\"http://www.openannotation.org/ns/annotates\"/>" + rstr += "<dcterms:creator>" + annotation.get_creator() + "</dcterms:creator>" + + if (annotation.get_annotationurl() != None) and (len(annotation.get_annotationurl()) > 0) and (annotation.get_bodyurl() != None) and (len(annotation.get_bodyurl()) > 0): + rstr += "<oac:hasContent rdf:about=\"" + annotation.get_uuid() + "\">" + rstr += "<rdf:type rdf:resource=\"" + annotation.get_annotationurl() + "\"/>" + rstr += "<dc:title>" + annotation.get_note_title() + "</dc:title>" + rstr += "<oac:hasBody>" + rstr += "<rdf:type rdf:resource=\"http://www.openannotation.org/ns/Note\"/>" + rstr += "<oac:body>" + rstr += annotation.get_bodyurl() + rstr += "</oac:body>" + rstr += "</oac:hasBody>" + rstr += '<dcterms:modified> %s </dcterms:modified>' % self.makeDateTimeFromTimeStamp(annotation.get_modified()) + rstr += "</oac:hasContent>" + + rstr += "</oac:Annotation>" + rstr += "<rdf:Description rdf:about=\"" + annotation.get_annotates() + "\">" + rstr += "<ore:Proxy>" + rstr += "<ore:proxyIn rdf:nodeID=\"anno\" />" + rstr += "<ore:proxyFor rdf:resource=\"" + annotation.get_annotates() + "\">" + rstr += "<oac:hasSegmentDescription>" + rstr += "<oac:SegmentDescription dc:format=\"image/svg+xml\">" + rstr += "<cnt:ContentAsText>" + rstr += "<cnt:chars>" + rstr += annotation.get_bodysvg() + rstr += "</cnt:chars>" + rstr += "<cnt:characterEncoding>utf-8</cnt:characterEncoding>" + rstr += "</cnt:ContentAsText>" + rstr += "</oac:SegmentDescription>" + rstr += "</oac:hasSegmentDescription>" + rstr += "</ore:proxyFor>" + rstr += "</ore:Proxy>" + rstr += "</rdf:Description>" + rstr += "</rdf:RDF>" + return rstr + + + + def assembleSVG(self, annotitle, annocontent): + #svg = "<?xml version=\"1.0\"?>" + svg = "<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"500\" height=\"500\" id=\"svg2\">" + svg += "<g id=\"layer1\">" + svg += "<rect width=\"500\" height=\"500\" x=\"0\" y=\"0\" id=\"rect2816\" style=\"fill:none;stroke:#000000;stroke-opacity:1\"/>" + svg += "<text x=\"2\" y=\"2\" id=\"text2818\" xml:space=\"preserve\" style=\"font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans\">" + svg += "<tspan x=\"10\" y=\"50\" id=\"notetitle\">" + annotitle + "</tspan>" + svg += "</text>" + + svg += "<text x=\"2\" y=\"150\" id=\"text2830\" xml:space=\"preserve\" style=\"font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans\">" + svg += "<tspan x=\"10\" y=\"150\" id=\"notecontent\">" + annocontent + "</tspan>" + svg += "</text>" + svg += "</g>" + svg += "</svg>" + return svg + + + + def download_annotations(self): + url = self._annotationserver + annotations = [] + annordf = "" + _logger.debug("contacting annotationserver %s", url) + if self._annotates == "": + self._annotates = "_" + values = {'w3c_hasTarget' : self._annotates} + _logger.debug('download annotations -- annotates is: %s ' % self._annotates) + try: + data = urllib.urlencode(values) + req = urllib2.Request(url, data) + response = urllib2.urlopen(req) + annordf = response.read() + except Exception, detail: + _logger.debug("readdb: failure at initial sync request f. annotations; detail: %s ", detail) + + if (annordf != None) and (len(annordf) > 0): + anno_arr = self.parse_annotations(annordf) + _logger.debug('length anno_arr %d', len(anno_arr)) + remote_uuids = [] + if len(anno_arr) > 0: + remote_uuids = [a.get_uuid() for a in anno_arr] + _logger.debug('remote_uuids %s', remote_uuids) + #check the modified timestamps + localuuids = [la.get_uuid() for la in self._annotations] + for a in anno_arr: + uuid = a.get_uuid() + if uuid in localuuids: + _logger.debug('uuid exists locally') + ind = localuuids.index(uuid) + rmodifiedtstamp = a.get_modified() + _logger.debug(str('timestamps are remote: %d, local %d' % (rmodifiedtstamp, self._annotations[ind].get_modified()))) + if self._annotations[ind].get_modified() < rmodifiedtstamp - self.modifiedtolerance: + _logger.debug('remote annotation is more recent than local annotation') + #take over the content + self._annotations[ind].set_note_title(a.get_note_title()) + self._annotations[ind].set_note_body(a.get_note_body()) + self._annotations[ind].set_modified(rmodifiedtstamp) + self.update_annotation_db_record(a) + _logger.debug(str('after update: timestamps are remote: %d, local %d' % (rmodifiedtstamp, self._annotations[ind].get_modified()))) + else: + if self._annotations[ind].get_creator() == self._creator: + _logger.debug(str('remote annotation is outdated, sending %s' % self._annotations[ind])) + self.send_annotation_to_server(self._annotations[ind]) + else: + self._annotations.append(a) + self.insert_annotation_db_record(a) + self._sidebar.update_for_page(a.page) + + + + + def sync_annotations(self): + url = self._annotationserver + annotations = [] + annordf = "" + _logger.debug("contacting annotationserver %s", url) + if self._annotates == "": + self._annotates = "_" + #check if there are annotations to be deleted: + if len(self._to_delete) > 0: + for delete_anid in self._to_delete: + values = {'w3c_hasTarget' : self._annotates, 'delete_anid': delete_anid } + try: + data = urllib.urlencode(values) + req = urllib2.Request(url, data) + response = urllib2.urlopen(req) + annordf = response.read() + self._to_delete.remove(delete_anid) + _logger.debug("\nafter delete, rdf is: %s\n\n" % annordf) + except Exception, detail: + _logger.debug("readdb: failure at request f. deleting annotations; detail: %s ", detail) + else: + #get annotations from server + client = gconf.client_get_default() + user = client.get_string("/desktop/sugar/user/nick") + + if self._userid == '': + self._userid = self.get_userid_for_username(user) + self._creator = self._userid + + values = {'w3c_hasTarget' : self._annotates, 'creator' : self._creator } + _logger.debug('sync annotations -- annotates is: %s ' % self._annotates) + try: + data = urllib.urlencode(values) + req = urllib2.Request(url, data) + response = urllib2.urlopen(req) + annordf = response.read() + except Exception, detail: + _logger.debug("readdb: failure at initial sync request f. annotations; detail: %s ", detail) + if (annordf != None) and (len(annordf) > 0): + anno_arr = self.parse_annotations(annordf) + _logger.debug('length anno_arr %d', len(anno_arr)) + remote_uuids = [] + if len(anno_arr) > 0: + localuuids = [la.get_uuid() for la in self._annotations] + remote_uuids = [a.get_uuid() for a in anno_arr] + _logger.debug('remote_uuids %s', remote_uuids) + #check the modified timestamps + for a in anno_arr: + uuid = a.get_uuid() + if uuid in localuuids: + _logger.debug('uuid exists locally') + ind = localuuids.index(uuid) + rmodifiedtstamp = a.get_modified() + _logger.debug(str('timestamps are remote: %d, local %d' % (rmodifiedtstamp, self._annotations[ind].get_modified()))) + if self._annotations[ind].get_modified() < rmodifiedtstamp - self.modifiedtolerance: + _logger.debug('remote annotation is more recent than local annotation') + #take over the content + self._annotations[ind].set_note_title(a.get_note_title()) + self._annotations[ind].set_note_body(a.get_note_body()) + self._annotations[ind].set_modified(rmodifiedtstamp) + _logger.debug(str('after update: timestamps are remote: %d, local %d' % (rmodifiedtstamp, self._annotations[ind].get_modified()))) + self.update_annotation_db_record(a) + else: + _logger.debug(str('remote annotation is outdated, sending %s' % self._annotations[ind])) + self.send_annotation_to_server(self._annotations[ind]) + + if (len(self._annotations) > 0): + #send annotations if necessary + for annotation in self._annotations: + if not annotation.get_uuid() in remote_uuids: + self.send_annotation_to_server(annotation) + + + + def send_annotation_to_server(self, annotation): + url = self._annotationserver + annordf = self.create_rdf_representation(annotation) + _logger.debug('it is a new or updated annotation, trying to send it to server, rdf: %s', annotation) + try: + req = urllib2.Request(url, annordf) + req.add_header('Content-Type', 'text/xml') + response = urllib2.urlopen(req) + re_rdf = response.read() + _logger.debug('rdf response from the server: %s', re_rdf) + annourl = self.get_annotationurl_from_server_response(re_rdf) + _logger.debug('got this annourl back from server: %s', annourl) + if annourl != None: + annotation.set_annotationurl(annourl) + bodyurl = self.get_bodyurl_from_server_response(re_rdf) + _logger.debug('got this bodyurl back from server: %s', bodyurl) + if bodyurl != None: + annotation.set_bodyurl(bodyurl) + self.update_annotation_db_record(annotation) + except Exception, detail: + _logger.debug("readdb: sending annotation failed: %s ", detail) + + diff --git a/readdialog.py b/readdialog.py new file mode 100644 index 0000000..65981ec --- /dev/null +++ b/readdialog.py @@ -0,0 +1,289 @@ +#!/usr/bin/env python + +# Stolen from the PyGTK demo module by Maik Hertha <maik.hertha@berlin.de> + +import gtk +import gobject + +from sugar.graphics import style +from sugar.graphics.toolbutton import ToolButton + +from gettext import gettext as _ +import cjson + +class BaseReadDialog(gtk.Window): + def __init__(self, parent_xid, dialog_title): + gtk.Window.__init__(self) + + self.connect('realize', self.__realize_cb) + + self.set_decorated(False) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_border_width(style.LINE_WIDTH) + + width = gtk.gdk.screen_width() - style.GRID_CELL_SIZE * 4 + height = gtk.gdk.screen_height() - style.GRID_CELL_SIZE * 4 + self.set_size_request(width, height) + + self._parent_window_xid = parent_xid + + _vbox = gtk.VBox(spacing=2) + self.add(_vbox) + + self.toolbar = gtk.Toolbar() + label = gtk.Label() + label.set_markup('<b> %s</b>' % dialog_title) + label.set_alignment(0, 0.5) + tool_item = gtk.ToolItem() + tool_item.add(label) + label.show() + self.toolbar.insert(tool_item, -1) + tool_item.show() + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + self.toolbar.insert(separator, -1) + separator.show() + stop = ToolButton(icon_name='dialog-cancel') + stop.set_tooltip(_('Cancel')) + stop.connect('clicked', lambda *w: self.destroy()) + self.toolbar.insert(stop, -1) + stop.show() + + delete = ToolButton(icon_name='edit-delete') + delete.set_tooltip(_('Delete')) + delete.connect('clicked', self.accept_clicked_delete_cb) + self.toolbar.insert(delete, -1) + delete.show() + + + accept = ToolButton(icon_name='dialog-ok') + accept.set_tooltip(_('Ok')) + accept.connect('clicked', self.accept_clicked_cb) + accept.show() + self.toolbar.insert(accept, -1) + + _vbox.pack_start(self.toolbar, expand=False) + self.toolbar.show() + + self._event_box = gtk.EventBox() + _vbox.pack_start(self._event_box, expand=True, fill = True) + self._canvas = None + + def set_canvas(self, canvas): + if self._canvas is not None: + self._event_box.remove(self._canvas) + self._event_box.add(canvas) + self._canvas = canvas + + def __realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(True) + + parent = gtk.gdk.window_foreign_new(self._parent_window_xid) + self.window.set_transient_for(parent) + + self.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + if self._canvas is not None: + self._canvas.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + self._canvas.grab_focus() + + self._event_box.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + def accept_clicked_cb(self, widget): + raise NotImplementedError + + + def accept_clicked_delete_cb(self, widget): + raise NotImplementedError + +class BookmarkDialog(BaseReadDialog): + def __init__(self, parent_xid, dialog_title, bookmark_title, bookmark_content, page, sidebarinstance): + BaseReadDialog.__init__(self, parent_xid, dialog_title) + + self._sidebarinstance = sidebarinstance + self._page = page + + vbox = gtk.VBox() + thbox = gtk.HBox() + vbox.pack_start(thbox, expand = False, fill = False) + thbox.set_border_width(style.DEFAULT_SPACING * 2) + thbox.set_spacing(style.DEFAULT_SPACING) + thbox.show() + + label_title = gtk.Label(_('<b>Title</b>:')) + label_title.set_use_markup(True) + label_title.set_alignment(1, 0.5) + label_title.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + thbox.pack_start(label_title, expand=False, fill = False) + label_title.show() + + self._title_entry = gtk.Entry() + self._title_entry.modify_bg(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._title_entry.modify_base(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._title_entry.set_size_request(int(gtk.gdk.screen_width() / 3), -1) + + thbox.pack_start(self._title_entry, expand = False, fill = False) + self._title_entry.show() + if bookmark_title is not None: + self._title_entry.set_text(bookmark_title) + + + cvbox = gtk.VBox() + vbox.pack_start(cvbox, expand = True, fill = True) + cvbox.set_border_width(style.DEFAULT_SPACING * 2) + cvbox.set_spacing(style.DEFAULT_SPACING/2) + cvbox.show() + + label_content = gtk.Label(_('<b>Details</b>:')) + label_content.set_use_markup(True) + label_content.set_alignment(0, 0) + label_content.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + cvbox.pack_start(label_content, expand=False, fill = False) + label_content.show() + + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + + self._content_entry = gtk.TextView() + self._content_entry.set_wrap_mode(gtk.WRAP_WORD) + + sw.add(self._content_entry) + sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + + cvbox.pack_start(sw, expand = True, fill = True) + self._content_entry.show() + if bookmark_content is not None: + buffer = self._content_entry.get_buffer() + buffer.set_text(bookmark_content) + + self.set_canvas(vbox) + +class BookmarkAddDialog(BookmarkDialog): + def __init__(self, parent_xid, dialog_title, bookmark_title, bookmark_content, page, sidebarinstance): + BookmarkDialog.__init__(self, parent_xid, dialog_title, bookmark_title, bookmark_content, page, sidebarinstance) + + def accept_clicked_cb(self, widget): + title = self._title_entry.get_text() + details = self._content_entry.get_buffer().props.text + content = {'title' : unicode(title), 'body' : unicode(details)} + self._sidebarinstance._real_add_bookmark(self._page, cjson.encode(content)) + self.destroy() + +class BookmarkEditDialog(BookmarkDialog): + def __init__(self, parent_xid, dialog_title, bookmark_title, bookmark_content, page, sidebarinstance): + BookmarkDialog.__init__(self, parent_xid, dialog_title, bookmark_title, bookmark_content, page, sidebarinstance) + + def accept_clicked_cb(self, widget): + title = self._title_entry.get_text() + details = self._content_entry.get_buffer().props.text + content = {'title' : unicode(title), 'body' : unicode(details)} + self._sidebarinstance.del_bookmark(self._page) + self._sidebarinstance._real_add_bookmark(self._page, cjson.encode(content)) + self.destroy() + + +class AnnotationDialog(BaseReadDialog): + def __init__(self, parent_xid, dialog_title, annotation_id, annotation_title, annotation_content, page, sidebarinstance): + BaseReadDialog.__init__(self, parent_xid, dialog_title) + + self._sidebarinstance = sidebarinstance + self._page = page + self._annotation_id = annotation_id + + vbox = gtk.VBox() + thbox = gtk.HBox() + vbox.pack_start(thbox, expand = False, fill = False) + thbox.set_border_width(style.DEFAULT_SPACING * 2) + thbox.set_spacing(style.DEFAULT_SPACING) + thbox.show() + + label_title = gtk.Label(_('<b>Title</b>:')) + label_title.set_use_markup(True) + label_title.set_alignment(1, 0.5) + label_title.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + thbox.pack_start(label_title, expand=False, fill = False) + label_title.show() + + self._title_entry = gtk.Entry() + self._title_entry.modify_bg(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._title_entry.modify_base(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._title_entry.set_size_request(int(gtk.gdk.screen_width() / 3), -1) + + thbox.pack_start(self._title_entry, expand = False, fill = False) + self._title_entry.show() + if annotation_title is not None: + self._title_entry.set_text(annotation_title) + + + cvbox = gtk.VBox() + vbox.pack_start(cvbox, expand = True, fill = True) + cvbox.set_border_width(style.DEFAULT_SPACING * 2) + cvbox.set_spacing(style.DEFAULT_SPACING/2) + cvbox.show() + + label_content = gtk.Label(_('<b>Details</b>:')) + label_content.set_use_markup(True) + label_content.set_alignment(0, 0) + label_content.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + cvbox.pack_start(label_content, expand=False, fill = False) + label_content.show() + + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + + self._content_entry = gtk.TextView() + self._content_entry.set_wrap_mode(gtk.WRAP_WORD) + + sw.add(self._content_entry) + sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + + cvbox.pack_start(sw, expand = True, fill = True) + self._content_entry.show() + if annotation_content is not None: + buffer = self._content_entry.get_buffer() + buffer.set_text(annotation_content) + + self.set_canvas(vbox) + +class AnnotationAddDialog(AnnotationDialog): + def __init__(self, parent_xid, dialog_title, annotation_id, annotation_title, annotation_content, page, sidebarinstance): + AnnotationDialog.__init__(self, parent_xid, dialog_title, annotation_id, annotation_title, annotation_content, page, sidebarinstance) + + def accept_clicked_cb(self, widget): + title = self._title_entry.get_text() + details = self._content_entry.get_buffer().props.text + content = {'title' : unicode(title), 'body' : unicode(details)} + self._sidebarinstance._real_add_annotation(self._page, cjson.encode(content)) + self.destroy() + + def accept_clicked_delete_cb(self, widget): + pass + +class AnnotationEditDialog(AnnotationDialog): + def __init__(self, parent_xid, dialog_title, annotation_id, annotation_title, annotation_content, page, sidebarinstance): + AnnotationDialog.__init__(self, parent_xid, dialog_title, annotation_id, annotation_title, annotation_content, page, sidebarinstance) + + def accept_clicked_cb(self, widget): + title = self._title_entry.get_text() + details = self._content_entry.get_buffer().props.text + content = {'title' : unicode(title), 'body' : unicode(details)} + self._sidebarinstance._real_edit_annotation(self._page, cjson.encode(content), self._annotation_id) + self.destroy() + + def accept_clicked_delete_cb(self, widget): + self._sidebarinstance._real_delete_annotation(self._page, self._annotation_id) + self.destroy() diff --git a/readsidebar.py b/readsidebar.py new file mode 100644 index 0000000..40c8922 --- /dev/null +++ b/readsidebar.py @@ -0,0 +1,329 @@ +# Copyright 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import time + +import gtk + +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar import profile +from sugar.util import timestamp_to_elapsed_string + +from annobookmark import AnnoBookmark, Bookmark +from readdb import BookmarkManager, AnnotationManager +from readdialog import BookmarkAddDialog, BookmarkEditDialog, AnnotationAddDialog, AnnotationEditDialog + +from gettext import gettext as _ + +_logger = logging.getLogger('anno-activity') + +#TODO: Add support for multiple bookmarks in a single page (required when sharing) + +class Sidebar(gtk.EventBox): + def __init__(self): + gtk.EventBox.__init__(self) + self.set_size_request(20, -1) + # Take care of the background first + white = gtk.gdk.color_parse("white") + self.modify_bg(gtk.STATE_NORMAL, white) + + self._box = gtk.VButtonBox() + self._box.set_layout(gtk.BUTTONBOX_CENTER) + self.add(self._box) + + self._box.show() + self.show() + + self._bookmark_icon = None + self._annotation_icon = None + self._annotation_icons = [] + self._annotation_event_ids = [] + self._annotation_icon_query_tooltip_cb_ids = [] + self._bookmark_manager = None + self._annotation_manager = None + self._is_showing_local_bookmark = False + self._is_showing_local_annotation = False + + self.add_events(gtk.gdk.BUTTON_PRESS_MASK) + + + + + def _add_bookmark_icon(self, bookmark): + xocolor = XoColor(bookmark.color) + self._bookmark_icon = Icon(icon_name = 'emblem-favorite', \ + pixel_size = 18, xo_color = xocolor) + + self._bookmark_icon.props.has_tooltip = True + self.__bookmark_icon_query_tooltip_cb_id = \ + self._bookmark_icon.connect('query_tooltip', self.__bookmark_icon_query_tooltip_cb, \ + bookmark) + + self.__event_cb_id = \ + self.connect('event', self.__event_cb, bookmark) + + self._box.pack_start(self._bookmark_icon ,expand=False,fill=False) + self._bookmark_icon.show_all() + + if bookmark.is_local(): + self._is_showing_local_bookmark = True + + def __bookmark_icon_query_tooltip_cb(self, widget, x, y, keyboard_mode, tip, bookmark): + tooltip_header = bookmark.get_note_title() + tooltip_body = bookmark.get_note_body() + #TRANS: This goes like Bookmark added by User 5 days ago (the elapsed string gets translated + #TRANS: automatically) + tooltip_footer = (_('Bookmark added by %(user)s %(time)s') \ + % {'user': bookmark.nick, 'time': timestamp_to_elapsed_string(bookmark.timestamp)}) + + vbox = gtk.VBox() + + l = gtk.Label('<big>%s</big>' % tooltip_header) + l.set_use_markup(True) + l.set_width_chars(40) + l.set_line_wrap(True) + vbox.pack_start(l, expand = False, fill = False) + l.show() + + l = gtk.Label('%s' % tooltip_body) + l.set_use_markup(True) + l.set_alignment(0, 0) + l.set_padding(2, 6) + l.set_width_chars(40) + l.set_line_wrap(True) + l.set_justify(gtk.JUSTIFY_FILL) + vbox.pack_start(l, expand = True, fill = True) + l.show() + + l = gtk.Label('<small><i>%s</i></small>' % tooltip_footer) + l.set_use_markup(True) + l.set_width_chars(40) + l.set_line_wrap(True) + vbox.pack_start(l, expand = False, fill = False) + l.show() + + tip.set_custom(vbox) + + return True + + + + + + def __event_cb(self, widget, event, annotation): + if event.type == gtk.gdk.BUTTON_PRESS and \ + self._annotation_icons != []: + + annotation_title = annotation.get_note_title() + annotation_content = annotation.get_note_body() + annotation_id = annotation.get_id() + + dialog = AnnotationEditDialog(parent_xid = self.get_toplevel().window.xid, \ + dialog_title = _("Edit notes for annotation: "), \ + annotation_id = annotation_id, \ + annotation_title = annotation_title, \ + annotation_content = annotation_content, page = annotation.page, \ + sidebarinstance = self) + dialog.show_all() + + return False + + + + + def _clear_bookmarks(self): + if self._bookmark_icon is not None: + self._bookmark_icon.disconnect(self.__bookmark_icon_query_tooltip_cb_id) + self.disconnect(self.__event_cb_id) + + self._bookmark_icon.hide() #XXX: Is this needed?? + self._bookmark_icon.destroy() + + self._bookmark_icon = None + + self._is_showing_local_bookmark = False + + + + + def set_bookmarkmanager(self, filehash): + self._bookmark_manager = BookmarkManager(filehash) + + def get_bookmarkmanager(self): + return (self._bookmark_manager) + + + def _clear_annotations(self): + if len(self._annotation_icons) > 0: + for i in range(len(self._annotation_icons)): + annotation_icon = self._annotation_icons[i] + annotation_icon.disconnect(self._annotation_icon_query_tooltip_cb_ids[i]) + annotation_icon.hide() + annotation_icon.destroy() + _logger.debug('disconnecting icon: %d' % self._annotation_event_ids[i] ) + self.disconnect(self._annotation_event_ids[i]) + self._annotation_icons[i] = None + + #self._annotation_icon = None + self._annotation_icons = [] + self._annotation_icon_query_tooltip_cb_ids = [] + self._annotation_event_ids = [] + self._is_showing_local_annotation = False + + + + def set_annotationmanager(self, filehash, mimetype): + self._annotation_manager = AnnotationManager(filehash, mimetype, self) + + + def get_annotationmanager(self): + return (self._annotation_manager) + + + def update_for_page(self, page): + self._clear_annotations() + annotations = self._annotation_manager.get_annotations_for_page(page) + for annotation in annotations: + self._add_annotation_icon(annotation) + + + def add_bookmark(self, page): + bookmark_title = (_("%s's bookmark") % profile.get_nick_name()) + bookmark_content = (_("Bookmark for page %d") % page) + dialog = BookmarkAddDialog(parent_xid = self.get_toplevel().window.xid, \ + dialog_title = _("Add notes for bookmark: "), \ + bookmark_title = bookmark_title, \ + bookmark_content = bookmark_content, page = page, \ + sidebarinstance = self) + dialog.show_all() + + + def _real_add_bookmark(self, page, content): + self._bookmark_manager.add_bookmark(page, unicode(content)) + self.update_for_page(page) + + + def del_bookmark(self, page): + self._bookmark_manager.del_bookmark(page) + self.update_for_page(page) + + + def is_showing_local_bookmark(self): + return self._is_showing_local_bookmark + + + def sync_annotations(self): + self._annotation_manager.sync_annotations() + + + def download_annotations(self): + self._annotation_manager.download_annotations() + + + def add_annotation(self, page): + annotation_title = (_("%s's annotation") % profile.get_nick_name()) + annotation_content = (_("Annotation for page %d") % (page + 1)) + dialog = AnnotationAddDialog(parent_xid = self.get_toplevel().window.xid, \ + dialog_title = _("Add notes for annotation: "), \ + annotation_id = 0, \ + annotation_title = annotation_title, \ + annotation_content = annotation_content, page = page, \ + sidebarinstance = self) + dialog.show_all() + + def _real_add_annotation(self, page, content): + self._annotation_manager.add_annotation(page, unicode(content)) + self.update_for_page(page) + + + + def _real_edit_annotation(self, page, content, annotation_id): + self._annotation_manager.edit_annotation(page, unicode(content), annotation_id) + self.update_for_page(page) + + + def _real_delete_annotation(self, page, annotation_id): + self.del_annotation(page, annotation_id) + + + def del_annotation(self, page, annotation_id): + self._annotation_manager.del_annotation(annotation_id) + self.update_for_page(page) + + + + def _add_annotation_icon(self, annotation): + xocolor = XoColor(annotation.color) + annotation_icon = Icon(icon_name = 'emblem-favorite', \ + pixel_size = 18, xo_color = xocolor) + + annotation_icon.props.has_tooltip = True + self._annotation_icon_query_tooltip_cb_ids.append(annotation_icon.connect('query_tooltip', self.__annotation_icon_query_tooltip_cb, annotation)) + + self._annotation_event_ids.append(self.connect('event', self.__event_cb, annotation)) + + _logger.debug('connecting event %d' % self._annotation_event_ids[-1]) + self._box.pack_start(annotation_icon ,expand=False,fill=False) + annotation_icon.show_all() + self._annotation_icons.append(annotation_icon) + + if annotation.is_local(): + self._is_showing_local_annotation = True + + + + def __annotation_icon_query_tooltip_cb(self, widget, x, y, keyboard_mode, tip, annotation): + tooltip_header = annotation.get_note_title() + tooltip_body = annotation.get_note_body() + #TRANS: This goes like annotation added by User 5 days ago (the elapsed string gets translated + #TRANS: automatically) + #tooltip_footer = (_('annotation added by %(user)s %(time)s') \ + # % {'user': annotation.creator, 'time': timestamp_to_elapsed_string(float(annotation.created))}) + + vbox = gtk.VBox() + + l = gtk.Label('<big>%s</big>' % tooltip_header) + l.set_use_markup(True) + l.set_width_chars(40) + l.set_line_wrap(True) + vbox.pack_start(l, expand = False, fill = False) + l.show() + + l = gtk.Label('%s' % tooltip_body) + l.set_use_markup(True) + l.set_alignment(0, 0) + l.set_padding(2, 6) + l.set_width_chars(40) + l.set_line_wrap(True) + l.set_justify(gtk.JUSTIFY_FILL) + vbox.pack_start(l, expand = True, fill = True) + l.show() + + #l = gtk.Label('<small><i>%s</i></small>' % tooltip_footer) + #l.set_use_markup(True) + #l.set_width_chars(40) + #l.set_line_wrap(True) + #vbox.pack_start(l, expand = False, fill = False) + #l.show() + + tip.set_custom(vbox) + + return True + + diff --git a/readtoolbar.py b/readtoolbar.py new file mode 100644 index 0000000..53a756f --- /dev/null +++ b/readtoolbar.py @@ -0,0 +1,320 @@ +# Copyright (C) 2006, Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +import gobject +import gtk +import evince + +try: + import epubadapter +except: + pass + +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.menuitem import MenuItem +from sugar.graphics import iconentry +from sugar.activity import activity + +class EditToolbar(activity.EditToolbar): + __gtype_name__ = 'EditToolbar' + + def __init__(self): + activity.EditToolbar.__init__(self) + + self._evince_view = None + + self._document = None + self._find_job = None + + search_item = gtk.ToolItem() + + self._search_entry = iconentry.IconEntry() + self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self._search_entry.add_clear_button() + self._search_entry.connect('activate', self._search_entry_activate_cb) + self._search_entry.connect('changed', self._search_entry_changed_cb) + self._search_entry_changed = True + + width = int(gtk.gdk.screen_width() / 3) + self._search_entry.set_size_request(width, -1) + + search_item.add(self._search_entry) + self._search_entry.show() + + self.insert(search_item, -1) + search_item.show() + + self._prev = ToolButton('go-previous-paired') + self._prev.set_tooltip(_('Previous')) + self._prev.props.sensitive = False + self._prev.connect('clicked', self._find_prev_cb) + self.insert(self._prev, -1) + self._prev.show() + + self._next = ToolButton('go-next-paired') + self._next.set_tooltip(_('Next')) + self._next.props.sensitive = False + self._next.connect('clicked', self._find_next_cb) + self.insert(self._next, -1) + self._next.show() + + def set_view(self, view): + self._evince_view = view + self._evince_view.find_set_highlight_search(True) + + def set_document(self, document): + self._document = document + + def _clear_find_job(self): + if self._find_job is None: + return + if not self._find_job.is_finished(): + self._find_job.cancel() + self._find_job.disconnect(self._find_updated_handler) + self._find_job = None + + def _search_find_first(self): + self._clear_find_job() + text = self._search_entry.props.text + if text != "": + try: + self._find_job = evince.JobFind(document=self._document, start_page=0, n_pages=self._document.get_n_pages(), text=text, case_sensitive=False) + self._find_updated_handler = self._find_job.connect('updated', self._find_updated_cb) + evince.job_scheduler_push_job(self._find_job, evince.JOB_PRIORITY_NONE) + except TypeError: + self._find_job = epubadapter.JobFind(document=self._document, start_page=0, n_pages=self._document.get_n_pages(), text=text, case_sensitive=False) + self._find_updated_handler = self._find_job.connect('updated', self._find_updated_cb) + else: + # FIXME: highlight nothing + pass + + self._search_entry_changed = False + self._update_find_buttons() + + def _search_find_next(self): + self._evince_view.find_next() + + def _search_find_last(self): + # FIXME: does Evince support find last? + return + + def _search_find_prev(self): + self._evince_view.find_previous() + + def _search_entry_activate_cb(self, entry): + if self._search_entry_changed: + self._search_find_first() + else: + self._search_find_next() + + def _search_entry_changed_cb(self, entry): + self._search_entry_changed = True + self._update_find_buttons() + +# Automatically start search, maybe after timeout? +# self._search_find_first() + + def _find_changed_cb(self, page, spec): + self._update_find_buttons() + + def _find_updated_cb(self, job, page = None): + self._evince_view.find_changed(job, page) + + def _find_prev_cb(self, button): + if self._search_entry_changed: + self._search_find_last() + else: + self._search_find_prev() + + def _find_next_cb(self, button): + if self._search_entry_changed: + self._search_find_first() + else: + self._search_find_next() + + def _update_find_buttons(self): + if self._search_entry_changed: + if self._search_entry.props.text != "": + self._prev.props.sensitive = False +# self._prev.set_tooltip(_('Find last')) + self._next.props.sensitive = True + self._next.set_tooltip(_('Find first')) + else: + self._prev.props.sensitive = False + self._next.props.sensitive = False + else: + self._prev.props.sensitive = True + self._prev.set_tooltip(_('Find previous')) + self._next.props.sensitive = True + self._next.set_tooltip(_('Find next')) + + +class ViewToolbar(gtk.Toolbar): + __gtype_name__ = 'ViewToolbar' + + __gsignals__ = { + 'needs-update-size': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + 'go-fullscreen': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])) + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._evince_view = None + self._document = None + + self._zoom_out = ToolButton('zoom-out') + self._zoom_out.set_tooltip(_('Zoom out')) + self._zoom_out.connect('clicked', self._zoom_out_cb) + self.insert(self._zoom_out, -1) + self._zoom_out.show() + + self._zoom_in = ToolButton('zoom-in') + self._zoom_in.set_tooltip(_('Zoom in')) + self._zoom_in.connect('clicked', self._zoom_in_cb) + self.insert(self._zoom_in, -1) + self._zoom_in.show() + + self._zoom_to_width = ToolButton('zoom-best-fit') + self._zoom_to_width.set_tooltip(_('Zoom to width')) + self._zoom_to_width.connect('clicked', self._zoom_to_width_cb) + self.insert(self._zoom_to_width, -1) + self._zoom_to_width.show() + + palette = self._zoom_to_width.get_palette() + menu_item = MenuItem(_('Zoom to fit')) + menu_item.connect('activate', self._zoom_to_fit_menu_item_activate_cb) + palette.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Actual size')) + menu_item.connect('activate', self._actual_size_menu_item_activate_cb) + palette.menu.append(menu_item) + menu_item.show() + + tool_item = gtk.ToolItem() + self.insert(tool_item, -1) + tool_item.show() + + self._zoom_spin = gtk.SpinButton() + self._zoom_spin.set_range(5.409, 400) + self._zoom_spin.set_increments(1, 10) + self._zoom_spin_notify_value_handler = self._zoom_spin.connect( + 'notify::value', self._zoom_spin_notify_value_cb) + tool_item.add(self._zoom_spin) + self._zoom_spin.show() + + zoom_perc_label = gtk.Label(_("%")) + zoom_perc_label.show() + tool_item_zoom_perc_label = gtk.ToolItem() + tool_item_zoom_perc_label.add(zoom_perc_label) + self.insert(tool_item_zoom_perc_label, -1) + tool_item_zoom_perc_label.show() + + spacer = gtk.SeparatorToolItem() + spacer.props.draw = False + self.insert(spacer, -1) + spacer.show() + + self._fullscreen = ToolButton('view-fullscreen') + self._fullscreen.set_tooltip(_('Fullscreen')) + self._fullscreen.connect('clicked', self._fullscreen_cb) + self.insert(self._fullscreen, -1) + self._fullscreen.show() + + self._view_notify_zoom_handler = None + + def set_view(self, view): + self._evince_view = view + self._zoom_spin.props.value = self._evince_view.props.zoom * 100 + self._view_notify_zoom_handler = self._evince_view.connect( + 'notify::zoom', self._view_notify_zoom_cb) + + self._update_zoom_buttons() + + + def _zoom_spin_notify_value_cb(self, zoom_spin, pspec): + if not self._view_notify_zoom_handler: + return + self._evince_view.disconnect(self._view_notify_zoom_handler) + try: + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.props.zoom = zoom_spin.props.value / 100.0 + finally: + self._view_notify_zoom_handler = self._evince_view.connect( + 'notify::zoom', self._view_notify_zoom_cb) + + def _view_notify_zoom_cb(self, evince_view, pspec): + self._zoom_spin.disconnect(self._zoom_spin_notify_value_handler) + try: + self._zoom_spin.props.value = round(evince_view.props.zoom * 100.0) + finally: + self._zoom_spin_notify_value_handler = self._zoom_spin.connect( + 'notify::value', self._zoom_spin_notify_value_cb) + + def zoom_in(self): + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.zoom_in() + self._update_zoom_buttons() + + def _zoom_in_cb(self, button): + self.zoom_in() + + def zoom_out(self): + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.zoom_out() + self._update_zoom_buttons() + + def _zoom_out_cb(self, button): + self.zoom_out() + + def zoom_to_width(self): + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH + self.emit('needs-update-size') + self._update_zoom_buttons() + + def _zoom_to_width_cb(self, button): + self.zoom_to_width() + + def _update_zoom_buttons(self): + self._zoom_in.props.sensitive = self._evince_view.can_zoom_in() + self._zoom_out.props.sensitive = self._evince_view.can_zoom_out() + + def _zoom_to_fit_menu_item_activate_cb(self, menu_item): + if hasattr(self._evince_view.props, 'sizing_mode'): #XXX + self._evince_view.props.sizing_mode = evince.SIZING_BEST_FIT + self.emit('needs-update-size') + self._update_zoom_buttons() + + def _actual_size_menu_item_activate_cb(self, menu_item): + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.props.zoom = 1.0 + self._update_zoom_buttons() + + def _fullscreen_cb(self, button): + self.emit('go-fullscreen') diff --git a/readtopbar.py b/readtopbar.py new file mode 100644 index 0000000..3f338f5 --- /dev/null +++ b/readtopbar.py @@ -0,0 +1,204 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# Copyright (C) 2009 One Laptop Per Child +# Author: Sayamindu Dasgupta <sayamindu@laptop.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk, gobject +import dbus + +from sugar.graphics import style +from sugar.graphics.icon import Icon, get_icon_state + +from gettext import gettext as _ + +_LEVEL_PROP = 'battery.charge_level.percentage' +_CHARGING_PROP = 'battery.rechargeable.is_charging' +_DISCHARGING_PROP = 'battery.rechargeable.is_discharging' +_PRESENT_PROP = 'battery.present' + +_ICON_NAME = 'battery' + +# Taken from sugar/extensions/deviceicon/battery.py +class BattMan(gobject.GObject): + __gproperties__ = { + 'level' : (int, None, None, 0, 100, 0, + gobject.PARAM_READABLE), + 'charging' : (bool, None, None, False, + gobject.PARAM_READABLE), + 'discharging' : (bool, None, None, False, + gobject.PARAM_READABLE), + 'present' : (bool, None, None, False, + gobject.PARAM_READABLE) + } + + def __init__(self, udi): + gobject.GObject.__init__(self) + + bus = dbus.Bus(dbus.Bus.TYPE_SYSTEM) + proxy = bus.get_object('org.freedesktop.Hal', udi, + follow_name_owner_changes=True) + self._battery = dbus.Interface(proxy, 'org.freedesktop.Hal.Device') + bus.add_signal_receiver(self._battery_changed, + 'PropertyModified', + 'org.freedesktop.Hal.Device', + 'org.freedesktop.Hal', + udi) + + self._level = self._get_level() + self._charging = self._get_charging() + self._discharging = self._get_discharging() + self._present = self._get_present() + + def _get_level(self): + try: + return self._battery.GetProperty(_LEVEL_PROP) + except dbus.DBusException: + logging.error('Cannot access %s' % _LEVEL_PROP) + return 0 + + def _get_charging(self): + try: + return self._battery.GetProperty(_CHARGING_PROP) + except dbus.DBusException: + logging.error('Cannot access %s' % _CHARGING_PROP) + return False + + def _get_discharging(self): + try: + return self._battery.GetProperty(_DISCHARGING_PROP) + except dbus.DBusException: + logging.error('Cannot access %s' % _DISCHARGING_PROP) + return False + + def _get_present(self): + try: + return self._battery.GetProperty(_PRESENT_PROP) + except dbus.DBusException: + logging.error('Cannot access %s' % _PRESENT_PROP) + return False + + def do_get_property(self, pspec): + if pspec.name == 'level': + return self._level + if pspec.name == 'charging': + return self._charging + if pspec.name == 'discharging': + return self._discharging + if pspec.name == 'present': + return self._present + + def get_type(self): + return 'battery' + + def _battery_changed(self, num_changes, changes_list): + for change in changes_list: + if change[0] == _LEVEL_PROP: + self._level = self._get_level() + self.notify('level') + elif change[0] == _CHARGING_PROP: + self._charging = self._get_charging() + self.notify('charging') + elif change[0] == _DISCHARGING_PROP: + self._discharging = self._get_discharging() + self.notify('discharging') + elif change[0] == _PRESENT_PROP: + self._present = self._get_present() + self.notify('present') + + +class _TopBar(gtk.HBox): + __gproperties__ = { + 'completion-level' : (float, None, None, 0.0, 100.0, 0.0, + gobject.PARAM_READWRITE), + } + + def __init__(self): + gtk.HBox.__init__(self) + + self.set_border_width(int(style.DEFAULT_SPACING/2.0)) + self.set_spacing(style.DEFAULT_SPACING * 4) + + self._completion_level = 0 + self._progressbar = None + + bus = dbus.Bus(dbus.Bus.TYPE_SYSTEM) + proxy = bus.get_object('org.freedesktop.Hal', + '/org/freedesktop/Hal/Manager') + hal_manager = dbus.Interface(proxy, 'org.freedesktop.Hal.Manager') + udis = hal_manager.FindDeviceByCapability('battery') + if len(udis) > 0: + self._battery = BattMan(udis[0]) # TODO: Support more than one battery + self._battery.connect('notify::level', \ + self._battery_level_changed_cb) + else: + self._battery = None + + self._icon = None + + self._setup() + + def do_get_property(self, property): + if property.name == 'completion-level': + return self._completion_level + else: + raise AttributeError, 'unknown property %s' % property.name + + def do_set_property(self, property, value): + if property.name == 'completion-level': + self.set_completion_level(value) + else: + raise AttributeError, 'unknown property %s' % property.name + + def set_completion_level(self, value): + self._completion_level = value + self._progressbar.set_fraction(self._completion_level/100.0) + + def _setup(self): + self._progressbar = gtk.ProgressBar() + self._progressbar.props.discrete_blocks = 10 + self._progressbar.set_fraction(self._completion_level/100.0) + self.pack_start(self._progressbar, expand = True, fill = True) + if self._battery is not None: + icon_name = get_icon_state(_ICON_NAME, self._battery.props.level, step=-5) + self._icon = Icon(icon_name=icon_name) + self.pack_start(self._icon, expand = False, fill = False) + + def _battery_level_changed_cb(self, pspec, param): + icon_name = get_icon_state(_ICON_NAME, self._battery.props.level, step=-5) + self._icon.props.icon_name = icon_name + +class TopBar(_TopBar): + def __init__(self): + _TopBar.__init__(self) + self._document = None + + def set_document(self, document): + self._document = document + + page_cache = self._document.get_page_cache() + page_cache.connect('page-changed', self._page_changed_cb) + + def _page_changed_cb(self, page, proxy = None): + current_page = self._document.get_page_cache().get_current_page() + n_pages = self._document.get_n_pages() + + self.set_completion_level(current_page * 100/n_pages) + + #TRANS: Translate this as Page i of m (eg: Page 4 of 334) + self._progressbar.set_text(_("Page %i of %i") % (current_page, n_pages)) + + + diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..d3ab3a3 --- /dev/null +++ b/setup.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +# Copyright (C) 2006, Red Hat, Inc.
+# +# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# +# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+# +# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ +from sugar.activity import bundlebuilder + +bundlebuilder.start() |