diff options
author | Rafael Ortiz <rafael@activitycentral.com> | 2013-03-07 05:38:50 (GMT) |
---|---|---|
committer | Rafael Ortiz <rafael@activitycentral.com> | 2013-03-07 05:38:50 (GMT) |
commit | cc02fea1202a9dea2b5c57d4c501889447fa1b59 (patch) | |
tree | 5be075bccc887c04b2434c63b6bf23ede2fe98ee |
Initial commit
330 files changed, 19753 insertions, 0 deletions
diff --git a/GetIABooksActivity.py b/GetIABooksActivity.py new file mode 100644 index 0000000..a1488d0 --- /dev/null +++ b/GetIABooksActivity.py @@ -0,0 +1,1256 @@ +#! /usr/bin/env python + +# Copyright (C) 2009 James D. Simmons +# Copyright (C) 2009 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 os +import logging +import time + +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GdkPixbuf +from gi.repository import GObject +from gi.repository import Pango + +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.activity.widgets import StopButton +from sugar3.graphics import style +from sugar3.graphics.toolbutton import ToolButton +from sugar3.graphics.toggletoolbutton import ToggleToolButton +from sugar3.graphics.toolcombobox import ToolComboBox +from sugar3.graphics.combobox import ComboBox +from sugar3.graphics import iconentry +from sugar3 import profile +from sugar3.activity import activity +from sugar3.activity.widgets import ToolbarButton +from sugar3.bundle.activitybundle import ActivityBundle +from sugar3.datastore import datastore +from sugar3.graphics.alert import NotifyAlert +from sugar3.graphics.alert import Alert +from sugar3.graphics.icon import Icon +from gettext import gettext as _ + +import dbus +import ConfigParser +import base64 +import urllib2 +import socket + + +from listview import ListView +import opds +import languagenames +import devicemanager + +_MIMETYPES = {'PDF': u'application/pdf', 'PDF BW': u'application/pdf-bw', + 'EPUB': u'application/epub+zip', 'DJVU': u'image/x.djvu', 'MP3': u'audio/mpeg', 'OGG': u'audio/ogg'} +_SOURCES = {} +_SOURCES_CONFIG = {} + +READ_STREAM_SERVICE = 'read-activity-http' + +# directory exists if powerd is running. create a file here, +# named after our pid, to inhibit suspend. +POWERD_INHIBIT_DIR = '/var/run/powerd-inhibit-suspend' + + +class GetIABooksActivity(activity.Activity): + + def __init__(self, handle): + "The entry point to the Activity" + activity.Activity.__init__(self, handle, False) + self.max_participants = 1 + + self.selected_book = None + self.queryresults = None + self._getter = None + self.show_images = True + self.languages = {} + self._lang_code_handler = languagenames.LanguageNames() + self.catalogs_configuration = {} + self.catalog_history = [] + + if os.path.exists('/etc/get-books.cfg'): + self._read_configuration('/etc/get-books.cfg') + else: + self._read_configuration() + + toolbar_box = ToolbarBox() + activity_button = ToolButton() + color = profile.get_color() + bundle = ActivityBundle(activity.get_bundle_path()) + icon = Icon(file=bundle.get_icon(), xo_color=color) + activity_button.set_icon_widget(icon) + activity_button.show() + + toolbar_box.toolbar.insert(activity_button, 0) + self._add_search_controls(toolbar_box.toolbar) + + separator = Gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + toolbar_box.toolbar.insert(separator, -1) + + toolbar_box.toolbar.insert(StopButton(self), -1) + + self.set_toolbar_box(toolbar_box) + toolbar_box.show_all() + self._books_toolbar = toolbar_box.toolbar + + self._create_controls() + + if not self.powerd_running(): + try: + bus = dbus.SystemBus() + proxy = bus.get_object('org.freedesktop.ohm', + '/org/freedesktop/ohm/Keystore') + self.ohm_keystore = dbus.Interface(proxy, + 'org.freedesktop.ohm.Keystore') + except dbus.DBusException, e: + logging.warning("Error setting OHM inhibit: %s", e) + self.ohm_keystore = None + + def powerd_running(self): + self.using_powerd = os.access(POWERD_INHIBIT_DIR, os.W_OK) + logging.error("using_powerd: %d", self.using_powerd) + return self.using_powerd + + def _inhibit_suspend(self): + if self.using_powerd: + fd = open(POWERD_INHIBIT_DIR + "/%u" % os.getpid(), 'w') + logging.error("inhibit_suspend file is %s", (POWERD_INHIBIT_DIR \ + + "/%u" % os.getpid())) + fd.close() + return True + + if self.ohm_keystore is not None: + try: + self.ohm_keystore.SetKey('suspend.inhibit', 1) + return self.ohm_keystore.GetKey('suspend.inhibit') + except dbus.exceptions.DBusException: + logging.debug("failed to inhibit suspend") + return False + else: + return False + + def _allow_suspend(self): + if self.using_powerd: + if os.path.exists(POWERD_INHIBIT_DIR + "/%u" % os.getpid()): + os.unlink(POWERD_INHIBIT_DIR + "/%u" % os.getpid()) + logging.error("allow_suspend unlinking %s", (POWERD_INHIBIT_DIR \ + + "/%u" % os.getpid())) + return True + + if self.ohm_keystore is not None: + try: + self.ohm_keystore.SetKey('suspend.inhibit', 0) + return self.ohm_keystore.GetKey('suspend.inhibit') + except dbus.exceptions.DBusException: + logging.error("failed to allow suspend") + return False + else: + return False + + def _read_configuration(self, file_name='get-books.cfg'): + logging.error('Reading configuration from file %s', file_name) + config = ConfigParser.ConfigParser() + config.readfp(open(file_name)) + if config.has_option('GetBooks', 'show_images'): + self.show_images = config.getboolean('GetBooks', 'show_images') + self.languages = {} + if config.has_option('GetBooks', 'languages'): + languages_param = config.get('GetBooks', 'languages') + for language in languages_param.split(','): + lang_code = language.strip() + if len(lang_code) > 0: + self.languages[lang_code] = \ + self._lang_code_handler.get_full_language_name(lang_code) + + for section in config.sections(): + if section != 'GetBooks' and not section.startswith('Catalogs'): + name = config.get(section, 'name') + _SOURCES[section] = name + repo_config = {} + repo_config['query_uri'] = config.get(section, 'query_uri') + repo_config['opds_cover'] = config.get(section, 'opds_cover') + if config.has_option(section, 'summary_field'): + repo_config['summary_field'] = \ + config.get(section, 'summary_field') + else: + repo_config['summary_field'] = None + if config.has_option(section, 'blacklist'): + blacklist = config.get(section, 'blacklist') + repo_config['blacklist'] = blacklist.split(',') + # TODO strip? + else: + repo_config['blacklist'] = [] + + _SOURCES_CONFIG[section] = repo_config + + logging.error('_SOURCES %s', _SOURCES) + logging.error('_SOURCES_CONFIG %s', _SOURCES_CONFIG) + + for section in config.sections(): + if section.startswith('Catalogs'): + catalog_source = section.split('_')[1] + if not catalog_source in _SOURCES_CONFIG: + logging.error('There are not a source for the catalog ' + + 'section %s', section) + break + source_config = _SOURCES_CONFIG[catalog_source] + opds_cover = source_config['opds_cover'] + for catalog in config.options(section): + catalog_config = {} + catalog_config['query_uri'] = config.get(section, catalog) + catalog_config['opds_cover'] = opds_cover + catalog_config['source'] = catalog_source + catalog_config['name'] = catalog + catalog_config['summary_field'] = \ + source_config['summary_field'] + self.catalogs_configuration[catalog] = catalog_config + + self.source = _SOURCES_CONFIG.keys()[0] + + self.filter_catalogs_by_source() + + logging.error('languages %s', self.languages) + logging.error('catalogs %s', self.catalogs) + + def _add_search_controls(self, toolbar): + book_search_item = Gtk.ToolItem() + toolbar.search_entry = iconentry.IconEntry() + toolbar.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + toolbar.search_entry.add_clear_button() + toolbar.search_entry.connect('activate', + self.__search_entry_activate_cb) + width = int(Gdk.Screen.width() / 4) + toolbar.search_entry.set_size_request(width, -1) + book_search_item.add(toolbar.search_entry) + toolbar.search_entry.show() + toolbar.insert(book_search_item, -1) + book_search_item.show() + + toolbar.source_combo = ComboBox() + toolbar.source_combo.props.sensitive = True + toolbar.source_changed_cb_id = \ + toolbar.source_combo.connect('changed', self.__source_changed_cb) + combotool = ToolComboBox(toolbar.source_combo) + combotool.set_size_request(width, -1) + toolbar.insert(combotool, -1) + combotool.show() + + self.bt_catalogs = ToggleToolButton('books') + self.bt_catalogs.set_tooltip(_('Catalogs')) + toolbar.insert(self.bt_catalogs, -1) + self.bt_catalogs.connect('toggled', self.__toggle_cats_cb) + if len(self.catalogs) > 0: + self.bt_catalogs.show() + + if len(self.languages) > 0: + toolbar.config_toolbarbutton = ToolbarButton() + toolbar.config_toolbarbutton.props.icon_name = 'preferences-system' + toolbar.config_toolbarbox = Gtk.Toolbar() + toolbar.config_toolbarbutton.props.page = toolbar.config_toolbarbox + toolbar.language_combo = ComboBox() + toolbar.language_combo.props.sensitive = True + combotool = ToolComboBox(toolbar.language_combo) + toolbar.language_combo.append_item('all', _('Any language')) + for key in self.languages.keys(): + toolbar.language_combo.append_item(key, self.languages[key]) + toolbar.language_combo.set_active(0) + toolbar.config_toolbarbutton.props.page.insert(combotool, -1) + toolbar.insert(toolbar.config_toolbarbutton, -1) + toolbar.config_toolbarbutton.show() + combotool.show() + toolbar.language_changed_cb_id = \ + toolbar.language_combo.connect('changed', + self.__language_changed_cb) + + self.bt_catalogs = ToggleToolButton('books') + self.bt_catalogs.set_tooltip(_('Catalogs')) + toolbar.insert(self.bt_catalogs, -1) + self.bt_catalogs.connect('toggled', self.__toggle_cats_cb) + if len(self.catalogs) > 0: + self.bt_catalogs.show() + + self._device_manager = devicemanager.DeviceManager() + self._refresh_sources(toolbar) + self._device_manager.connect('device-changed', + self.__device_changed_cb) + + toolbar.search_entry.grab_focus() + return toolbar + + def __bt_catalogs_clicked_cb(self, button): + palette = button.get_palette() + palette.popup(immediate=True, state=palette.SECONDARY) + + def __switch_catalog_cb(self, catalog_name): + catalog_config = self.catalogs[catalog_name.decode('utf-8')] + self.__activate_catalog_cb(None, catalog_config) + + def __activate_catalog_cb(self, menu, catalog_config): + query_language = self.get_query_language() + + self.enable_button(False) + self.clear_downloaded_bytes() + self.book_selected = False + self.listview.clear() + logging.error('SOURCE %s', catalog_config['source']) + self._books_toolbar.search_entry.props.text = '' + self.source = catalog_config['source'] + position = _SOURCES_CONFIG[self.source]['position'] + self._books_toolbar.source_combo.set_active(position) + + if self.queryresults is not None: + self.queryresults.cancel() + self.queryresults = None + #arch = open("/home/olpc/Activities/BibliotecaCeibal.activity/prueba","w") + #arch.write(query_language) + #arch.close() + query_language = 'all' + self.queryresults = opds.RemoteQueryResult(catalog_config, + '', query_language) + self.show_message(_('Performing lookup, please wait...')) + # README: I think we should create some global variables for + # each cursor that we are using to avoid the creation of them + # every time that we want to change it + self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) + + self.queryresults.connect('updated', self.__query_updated_cb) + + def update_format_combo(self, links): + self.format_combo.handler_block(self.__format_changed_cb_id) + self.format_combo.remove_all() + for key in _MIMETYPES.keys(): + if _MIMETYPES[key] in links.keys(): + self.format_combo.append_item(_MIMETYPES[key], key) + self.format_combo.set_active(0) + self.format_combo.handler_unblock(self.__format_changed_cb_id) + + def get_search_terms(self): + return self._books_toolbar.search_entry.props.text + + def __device_changed_cb(self, mgr): + logging.debug('Device was added/removed') + self._refresh_sources(self._books_toolbar) + + def _refresh_sources(self, toolbar): + toolbar.source_combo.handler_block(toolbar.source_changed_cb_id) + + #TODO: Do not blindly clear this + toolbar.source_combo.remove_all() + + position = 0 + for key in _SOURCES.keys(): + toolbar.source_combo.append_item(_SOURCES[key], key, + icon_name='internet-icon') + _SOURCES_CONFIG[key]['position'] = position + position = position + 1 + + # Add menu for local books + if len(_SOURCES) > 0: + toolbar.source_combo.append_separator() + toolbar.source_combo.append_item('local_books', _('My books'), + icon_name='activity-journal') + + devices = self._device_manager.get_devices() + + first_device = True + for device_name in devices: + device = devices[device_name] + logging.debug('device %s', device) + if device['removable']: + mount_point = device['mount_path'] + label = device['label'] + if label == '' or label is None: + capacity = device['size'] + label = (_('%.2f GB Volume') % (capacity / (1024.0 ** 3))) + logging.debug('Adding device %s', (label)) + if first_device: + toolbar.source_combo.append_separator() + first_device = False + toolbar.source_combo.append_item(mount_point, label) + + toolbar.source_combo.set_active(0) + toolbar.source_combo.handler_unblock(toolbar.source_changed_cb_id) + + def __format_changed_cb(self, combo): + self.show_book_data(False) + + def __language_changed_cb(self, combo): + self.find_books(self.get_search_terms()) + + def __search_entry_activate_cb(self, entry): + self.find_books(self.get_search_terms()) + + def __get_book_cb(self, button): + self.get_book() + + def enable_button(self, state): + self._download.props.sensitive = state + self.format_combo.props.sensitive = state + + def move_up_catalog(self, treeview): + len_cat = len(self.catalog_history) + if len_cat == 1: + return + else: + # move a level up the tree + self.catalog_listview.handler_block(self._catalog_changed_id) + self.catalog_history.pop() + len_cat -= 1 + if(len_cat == 1): + title = self.catalog_history[0]['title'] + self.bt_move_up_catalog.set_label(title) + self.bt_move_up_catalog.hide_image() + else: + title = self.catalog_history[len_cat - 1]['title'] + self.bt_move_up_catalog.set_label(title) + self.bt_move_up_catalog.show_image() + self.catalogs = self.catalog_history[len_cat - 1]['catalogs'] + if len(self.catalogs) > 0: + self.path_iter = {} + self.categories = [] + for key in self.catalogs.keys(): + self.categories.append({'text': key, 'dentro': []}) + self.treemodel.clear() + for p in self.categories: + self.path_iter[p['text']] = \ + self.treemodel.append([p['text']]) + self.catalog_listview.handler_unblock(self._catalog_changed_id) + + def move_down_catalog(self, treeview): + treestore, coldex = \ + self.catalog_listview.get_selection().get_selected() + len_cat = len(self.catalog_history) + if len_cat > 0 and self.catalog_history[len_cat - 1]['catalogs'] == []: + self.catalog_history.pop() + len_cat = len(self.catalog_history) + + # README: when the Activity starts by default there is nothing + # selected and this signal is called, so we have to avoid this + # 'append' because it fails + if coldex is not None: + self.catalog_history.append( + {'title': treestore.get_value(coldex, 0), 'catalogs': []}) + self.__switch_catalog_cb(treestore.get_value(coldex, 0)) + + def _sort_logfile(self, treemodel, itera, iterb): + a = treemodel.get_value(itera, 0) + b = treemodel.get_value(iterb, 0) + if a == None or b == None: + return 0 + a = a.lower() + b = b.lower() + if a > b: + return 1 + if a < b: + return -1 + return 0 + + def __toggle_cats_cb(self, button): + if button.get_active(): + self.tree_scroller.show_all() + self.separa.show() + else: + self.tree_scroller.hide() + self.separa.hide() + + def _create_controls(self): + self._download_content_length = 0 + self._download_content_type = None + self.progressbox = Gtk.Box(spacing=20, + orientation=Gtk.Orientation.HORIZONTAL) + self.progressbar = Gtk.ProgressBar() + self.progressbar.set_fraction(0.0) + self.progressbox.pack_start(self.progressbar, expand=True, fill=True, + padding=0) + self.cancel_btn = Gtk.Button(stock=Gtk.STOCK_CANCEL) + self.cancel_btn.connect('clicked', self.__cancel_btn_clicked_cb) + self.progressbox.pack_start(self.cancel_btn, expand=False, + fill=False, padding=0) + + self.msg_label = Gtk.Label() + + self.list_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + + # Catalogs treeview + self.catalog_listview = Gtk.TreeView() + self.catalog_listview.headers_clickble = True + self.catalog_listview.hover_expand = True + self.catalog_listview.rules_hint = True + self._catalog_changed_id = self.catalog_listview.connect( + 'cursor-changed', self.move_down_catalog) + self.catalog_listview.set_enable_search(False) + + self.treemodel = Gtk.ListStore(str) + self.treemodel.set_sort_column_id(0, Gtk.SortType.ASCENDING) + self.catalog_listview.set_model(self.treemodel) + + renderer = Gtk.CellRendererText() + renderer.set_property('wrap-mode', Pango.WrapMode.WORD) + self.treecol = Gtk.TreeViewColumn(_('Catalogs'), renderer, text=0) + self.treecol.set_property('clickable', True) + self.treecol.connect('clicked', self.move_up_catalog) + self.catalog_listview.append_column(self.treecol) + self.bt_move_up_catalog = ButtonWithImage(_('Catalogs')) + self.bt_move_up_catalog.hide_image() + self.treecol.set_widget(self.bt_move_up_catalog) + + self.load_source_catalogs() + + self.tree_scroller = Gtk.ScrolledWindow(hadjustment=None, + vadjustment=None) + self.tree_scroller.set_policy(Gtk.PolicyType.NEVER, + Gtk.PolicyType.AUTOMATIC) + self.tree_scroller.add(self.catalog_listview) + self.list_box.pack_start(self.tree_scroller, expand=False, + fill=False, padding=0) + self.separa = Gtk.VSeparator() + self.list_box.pack_start(self.separa, expand=False, + fill=False, padding=0) + + # books listview + self.listview = ListView(self._lang_code_handler) + self.listview.connect('selection-changed', self.selection_cb) + self.listview.set_enable_search(False) + + self.list_scroller = Gtk.ScrolledWindow(hadjustment=None, + vadjustment=None) + self.list_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) + vadjustment = self.list_scroller.get_vadjustment() + vadjustment.connect('value-changed', + self.__vadjustment_value_changed_cb) + self.list_scroller.add(self.listview) + self.list_box.pack_start(self.list_scroller, expand=True, + fill=True, padding=0) + + self.scrolled = Gtk.ScrolledWindow() + self.scrolled.set_policy(Gtk.PolicyType.NEVER, + Gtk.PolicyType.AUTOMATIC) + self.scrolled.props.shadow_type = Gtk.ShadowType.NONE + self.textview = Gtk.TextView() + self.textview.set_editable(False) + self.textview.set_cursor_visible(False) + self.textview.set_wrap_mode(Gtk.WrapMode.WORD) + self.textview.set_justification(Gtk.Justification.LEFT) + self.textview.set_left_margin(20) + self.textview.set_right_margin(20) + self.scrolled.add(self.textview) + self.list_box.show_all() + self.separa.hide() + self.tree_scroller.hide() + + vbox_download = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + + hbox_format = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + format_label = Gtk.Label(label=_('Format:')) + self.format_combo = ComboBox() + for key in _MIMETYPES.keys(): + self.format_combo.append_item(_MIMETYPES[key], key) + self.format_combo.set_active(0) + self.format_combo.props.sensitive = False + self.__format_changed_cb_id = \ + self.format_combo.connect('changed', self.__format_changed_cb) + + hbox_format.pack_start(format_label, False, False, 10) + hbox_format.pack_start(self.format_combo, False, False, 10) + vbox_download.pack_start(hbox_format, False, False, 10) + + self._download = Gtk.Button(_('Get Book')) + self._download.props.sensitive = False + self._download.connect('clicked', self.__get_book_cb) + vbox_download.pack_start(self._download, False, False, 10) + + bottom_hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + + if self.show_images: + self.__image_downloader = None + self.image = Gtk.Image() + self.add_default_image() + bottom_hbox.pack_start(self.image, False, False, 10) + bottom_hbox.pack_start(self.scrolled, True, True, 10) + bottom_hbox.pack_start(vbox_download, False, False, 10) + bottom_hbox.show_all() + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + vbox.pack_start(self.msg_label, False, False, 10) + vbox.pack_start(self.progressbox, False, False, 10) + vbox.pack_start(self.list_box, True, True, 0) + vbox.pack_start(bottom_hbox, False, False, 10) + self.set_canvas(vbox) + self.listview.show() + vbox.show() + self.list_scroller.show() + self.progressbox.hide() + self.show_message( + _('Enter words from the Author or Title to begin search.')) + + self._books_toolbar.search_entry.grab_focus() + if len(self.catalogs) > 0: + self.bt_catalogs.set_active(True) + + def filter_catalogs_by_source(self): + self.catalogs = {} + for catalog_key in self.catalogs_configuration: + catalog = self.catalogs_configuration[catalog_key] + if catalog['source'] == self.source: + self.catalogs[catalog_key] = catalog + + def load_source_catalogs(self): + self.filter_catalogs_by_source() + + if len(self.catalogs) > 0: + self.categories = [] + self.path_iter = {} + self.catalog_history = [] + self.catalog_history.append({'title': _('Catalogs'), + 'catalogs': self.catalogs}) + for key in self.catalogs.keys(): + self.categories.append({'text': key, 'dentro': []}) + self.treemodel.clear() + + for p in self.categories: + self.path_iter[p['text']] = self.treemodel.append([p['text']]) + + def can_close(self): + self._lang_code_handler.close() + if self.queryresults is not None: + self.queryresults.cancel() + self.queryresults = None + return True + + def selection_cb(self, widget): + # Testing... + selected_book = self.listview.get_selected_book() + if self.source == 'local_books': + if selected_book: + self.download_url = '' + self.selected_book = selected_book + self._download.hide() + self.show_book_data() + self._object_id = selected_book.get_object_id() + self._show_journal_alert(_('Selected book'), + self.selected_title) + else: + self.clear_downloaded_bytes() + if selected_book: + self.update_format_combo(selected_book.get_download_links()) + self.selected_book = selected_book + self._download.show() + self.show_book_data() + + def show_message(self, text): + self.msg_label.set_text(text) + self.msg_label.show() + + def hide_message(self): + self.msg_label.hide() + + def show_book_data(self, load_image=True): + self.selected_title = self.selected_book.get_title() + book_data = _('Title:\t\t') + self.selected_title + '\n' + self.selected_author = self.selected_book.get_author() + book_data += _('Author:\t\t') + self.selected_author + '\n' + self.selected_publisher = self.selected_book.get_publisher() + self.selected_summary = self.selected_book.get_summary() + if (self.selected_summary is not 'Unknown'): + book_data += _('Summary:\t') + self.selected_summary + '\n' + self.selected_language_code = self.selected_book.get_language() + if self.selected_language_code != '': + try: + self.selected_language = \ + self._lang_code_handler.get_full_language_name( + self.selected_book.get_language()) + except: + self.selected_language = self.selected_book.get_language() + book_data += _('Language:\t') + self.selected_language + '\n' + book_data += _('Publisher:\t') + self.selected_publisher + '\n' + if self.source != 'local_books': + try: + self.download_url = self.selected_book.get_download_links()[\ + self.format_combo.props.value] + except: + pass + textbuffer = self.textview.get_buffer() + textbuffer.set_text('\n' + book_data) + self.enable_button(True) + + # Cover Image + self.exist_cover_image = False + if self.show_images and load_image: + if self.source == 'local_books': + cover_image_buffer = self.get_journal_entry_cover_image( + self.selected_book.get_object_id()) + if (cover_image_buffer): + self.add_image_buffer( + self.get_pixbuf_from_buffer(cover_image_buffer)) + else: + self.add_default_image() + else: + url_image = self.selected_book.get_image_url() + self.add_default_image() + if url_image: + self.download_image(url_image.values()[0]) + + def get_pixbuf_from_buffer(self, image_buffer): + """Buffer To Pixbuf""" + pixbuf_loader = GdkPixbuf.PixbufLoader() + pixbuf_loader.write(image_buffer) + pixbuf_loader.close() + pixbuf = pixbuf_loader.get_pixbuf() + return pixbuf + + def get_journal_entry_cover_image(self, object_id): + ds_object = datastore.get(object_id) + if 'cover_image' in ds_object.metadata: + cover_data = ds_object.metadata['cover_image'] + return base64.b64decode(cover_data) + elif 'preview' in ds_object.metadata: + return ds_object.metadata['preview'] + else: + return "" + + def download_image(self, url): + self._inhibit_suspend() + if self.__image_downloader is not None: + self.__image_downloader.stop_download() + self.__image_downloader = opds.ImageDownloader(self, url) + self.__image_downloader.connect('updated', self.__image_updated_cb) + + def __image_updated_cb(self, downloader, file_name): + if file_name is not None: + self.add_image(file_name) + self.exist_cover_image = True + os.remove(file_name) + else: + self.add_default_image() + self.__image_downloader = None + self._allow_suspend() + + def add_default_image(self): + if self.format_combo.props.value == 'audio/mpeg': + file_path = os.path.join(activity.get_bundle_path(), 'musica.svg') + self.add_image(file_path) + elif self.format_combo.props.value == 'audio/ogg': + file_path = os.path.join(activity.get_bundle_path(), 'application-ogg.png') + self.add_image(file_path) + else: + file_path = os.path.join(activity.get_bundle_path(),'generic_cover.png') + self.add_image(file_path) + + def add_image(self, file_path): + pixbuf = GdkPixbuf.Pixbuf.new_from_file(file_path) + self.add_image_buffer(pixbuf) + + def add_image_buffer(self, pixbuf): + image_height = int(Gdk.Screen.height() / 4) + image_width = image_height / 3 * 2 + width, height = pixbuf.get_width(), pixbuf.get_height() + scale = 1 + if (width > image_width) or (height > image_height): + scale_x = image_width / float(width) + scale_y = image_height / float(height) + scale = min(scale_x, scale_y) + + pixbuf2 = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, + pixbuf.get_has_alpha(), pixbuf.get_bits_per_sample(), + image_width, image_height) + + pixbuf2.fill(style.COLOR_PANEL_GREY.get_int()) + + margin_x = int((image_width - (width * scale)) / 2) + margin_y = int((image_height - (height * scale)) / 2) + + pixbuf.scale(pixbuf2, margin_x, margin_y, + image_width - (margin_x * 2), image_height - (margin_y * 2), + margin_x, margin_y, scale, scale, + GdkPixbuf.InterpType.BILINEAR) + + self.image.set_from_pixbuf(pixbuf2) + + def get_query_language(self): + query_language = None + if len(self.languages) > 0: + query_language = self._books_toolbar.language_combo.props.value + return query_language + + def find_books(self, search_text=''): + self._inhibit_suspend() + self.source = self._books_toolbar.source_combo.props.value + + query_language = self.get_query_language() + + self.enable_button(False) + self.clear_downloaded_bytes() + self.book_selected = False + self.listview.clear() + + if self.queryresults is not None: + self.queryresults.cancel() + self.queryresults = None + + if self.source == 'local_books': + self.listview.populate_with_books( + self.get_entrys_info(search_text)) + else: + aux = 0 #Arreglado que si apretas ENTER aparezcan TODOS los libros de Ceibal + if self.source == 'Ceibal' and search_text == '': + aux = 1 + #if self.source == 'local_books' and search_text == '': + # aux = 1 + if search_text == '' and aux == 0: + return + if len(search_text) < 3 and aux == 0: + self.show_message(_('You must enter at least 3 letters.')) + self._books_toolbar.search_entry.grab_focus() + return + if self.source == 'Internet Archive': + self.queryresults = \ + opds.InternetArchiveQueryResult(search_text, + query_language, self) + elif self.source in _SOURCES_CONFIG: + #if self.source in _SOURCES_CONFIG: + repo_configuration = _SOURCES_CONFIG[self.source] + self.queryresults = opds.RemoteQueryResult(repo_configuration, + search_text, query_language) + else: + self.queryresults = opds.LocalVolumeQueryResult(self.source, + search_text, query_language) + + self.show_message(_('Performing lookup, please wait...')) + self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) + self.queryresults.connect('updated', self.__query_updated_cb) + + def __query_updated_cb(self, query, midway): + self.listview.populate(self.queryresults) + if 'bozo_exception' in self.queryresults._feedobj: + # something went wrong and we have to inform about this + bozo_exception = self.queryresults._feedobj.bozo_exception + if isinstance(bozo_exception, urllib2.URLError): + if isinstance(bozo_exception.reason, socket.gaierror): + if bozo_exception.reason.errno == -2: + self.show_message(_('Could not reach the server. ' + 'Maybe you are not connected to the network')) + self.window.set_cursor(None) + return + self.show_message(_('There was an error downloading the list.')) + elif (len(self.queryresults.get_catalog_list()) > 0): + self.show_message(_('New catalog list %s was found') \ + % self.queryresults._configuration["name"]) + self.catalogs_updated(query, midway) + elif len(self.queryresults) == 0: + self.show_message(_('Sorry, no books could be found.')) + if not midway and len(self.queryresults) > 0: + self.hide_message() + query_language = self.get_query_language() + if query_language != 'all' and query_language != 'en': + # the bookserver send english books if there are not books in + # the requested language + only_english = True + for book in self.queryresults.get_book_list(): + if book.get_language() == query_language: + only_english = False + break + if only_english: + self.show_message( + _('Sorry, we only found english books.')) + self.get_window().set_cursor(None) + self._allow_suspend() + + def catalogs_updated(self, query, midway): + self.catalogs = {} + i = 0 + for catalog_item in self.queryresults.get_catalog_list(): + logging.debug('Add catalog %s', catalog_item.get_title()) + catalog_config = {} + download_link = '' + download_links = catalog_item.get_download_links() + for link in download_links.keys(): + download_link = download_links[link] + break + catalog_config['query_uri'] = download_link + catalog_config['opds_cover'] = \ + catalog_item._configuration['opds_cover'] + catalog_config['source'] = catalog_item._configuration['source'] + source_config = _SOURCES_CONFIG[catalog_config['source']] + catalog_config['name'] = catalog_item.get_title() + catalog_config['summary_field'] = \ + catalog_item._configuration['summary_field'] + catalog_config['index'] = i + if catalog_item.get_title() in source_config['blacklist']: + logging.debug('Catalog "%s" is in blacklist', + catalog_item.get_title()) + else: + self.catalogs[catalog_item.get_title().strip()] = \ + catalog_config + i = i + 1 + if len(self.catalogs) > 0: + len_cat = len(self.catalog_history) + self.catalog_history[len_cat - 1]['catalogs'] = self.catalogs + self.path_iter = {} + self.categories = [] + for key in self.catalogs.keys(): + self.categories.append({'text': key, 'dentro': []}) + self.treemodel.clear() + for p in self.categories: + self.path_iter[p['text']] = \ + self.treemodel.append([p['text']]) + + title = self.catalog_history[len_cat - 1]['title'] + self.bt_move_up_catalog.set_label(title) + self.bt_move_up_catalog.show_image() + + else: + self.catalog_history.pop() + + def __source_changed_cb(self, widget): + search_terms = self.get_search_terms() + if search_terms == '': + self.find_books(None) + else: + self.find_books(search_terms) + # enable/disable catalogs button if configuration is available + self.source = self._books_toolbar.source_combo.props.value + + # Get catalogs for this source + self.load_source_catalogs() + + if len(self.catalogs) > 0: + self.bt_catalogs.show() + self.bt_catalogs.set_active(True) + else: + self.bt_catalogs.set_active(False) + self.bt_catalogs.hide() + + def __vadjustment_value_changed_cb(self, vadjustment): + + if not self.queryresults.is_ready(): + return + try: + # Use various tricks to update resultset as user scrolls down + if ((vadjustment.props.upper - vadjustment.props.lower) > 1000 \ + and (vadjustment.props.upper - vadjustment.props.value - \ + vadjustment.props.page_size) / (vadjustment.props.upper - \ + vadjustment.props.lower) < 0.3) or ((vadjustment.props.upper \ + - vadjustment.props.value + - vadjustment.props.page_size) < 200): + if self.queryresults.has_next(): + self.show_message(_('Tiene mas resultados, espere por favor...')) + self.queryresults.update_with_next() + finally: + return + + def __cancel_btn_clicked_cb(self, btn): + if self._getter is not None: + try: + self._getter.cancel() + except: + logging.debug('Got an exception while trying' + \ + 'to cancel download') + self.progressbox.hide() + self.listview.props.sensitive = True + self._books_toolbar.search_entry.set_sensitive(True) + logging.debug('Download was canceled by the user.') + self._allow_suspend() + + def get_book(self): + self.enable_button(False) + self.progressbox.show_all() + GObject.idle_add(self.download_book, self.download_url) + + def download_book(self, url): + self._inhibit_suspend() + logging.error('DOWNLOAD BOOK %s', url) + self.listview.props.sensitive = False + self._books_toolbar.search_entry.set_sensitive(False) + path = os.path.join(self.get_activity_root(), 'instance', + 'tmp%i' % time.time()) + self._getter = opds.ReadURLDownloader(url) + self._getter.connect("finished", self._get_book_result_cb) + self._getter.connect("progress", self._get_book_progress_cb) + self._getter.connect("error", self._get_book_error_cb) + logging.debug("Starting download from %s to %s", url, path) + try: + self._getter.start(path) + except: + self.show_error_alert(_('Error'), _('Connection timed out for ') + + self.selected_title) + + self._download_content_length = self._getter.get_content_length() + self._download_content_type = self._getter.get_content_type() + + def _get_book_result_cb(self, getter, tempfile, suggested_name): + self.listview.props.sensitive = True + self._books_toolbar.search_entry.set_sensitive(True) + if self._download_content_type.startswith('text/html'): + # got an error page instead + self._get_book_error_cb(getter, 'HTTP Error') + return + self.process_downloaded_book(tempfile, suggested_name) + + def _get_book_progress_cb(self, getter, bytes_downloaded): + if self._download_content_length > 0: + logging.debug("Downloaded %u of %u bytes...", + bytes_downloaded, self._download_content_length) + else: + logging.debug("Downloaded %u bytes...", + bytes_downloaded) + total = self._download_content_length + self.set_downloaded_bytes(bytes_downloaded, total) + while Gtk.events_pending(): + Gtk.main_iteration() + + def _get_book_error_cb(self, getter, err): + self.listview.props.sensitive = True + self.enable_button(True) + self.progressbox.hide() + logging.debug("Error getting document: %s", err) + self._download_content_length = 0 + self._download_content_type = None + self._getter = None + if self.source == 'Internet Archive' and \ + getter._url.endswith('_text.pdf'): + # in the IA server there are files ending with _text.pdf + # smaller and better than the .pdf files, but not for all + # the books. We try to download them and if is not present + # download the .pdf file + self.download_url = self.download_url.replace('_text.pdf', '.pdf') + self.get_book() + else: + self._allow_suspend() + self._show_error_alert(_('Error: Could not download %s. ' + + 'The path in the catalog seems to be incorrect') % + self.selected_title) + + def set_downloaded_bytes(self, downloaded_bytes, total): + fraction = float(downloaded_bytes) / float(total) + self.progressbar.set_fraction(fraction) + + def clear_downloaded_bytes(self): + self.progressbar.set_fraction(0.0) + + def process_downloaded_book(self, tempfile, suggested_name): + logging.debug("Got document %s (%s)", tempfile, suggested_name) + self.create_journal_entry(tempfile) + self._getter = None + self._allow_suspend() + + def create_journal_entry(self, tempfile): + journal_entry = datastore.create() + journal_title = self.selected_title + if self.selected_author != '': + journal_title = journal_title + ', by ' + self.selected_author + journal_entry.metadata['title'] = journal_title + journal_entry.metadata['title_set_by_user'] = '1' + journal_entry.metadata['keep'] = '0' + journal_entry.metadata['mime_type'] = \ + self.format_combo.props.value + # Fix fake mime type for black&white pdfs + if journal_entry.metadata['mime_type'] == _MIMETYPES['PDF BW']: + journal_entry.metadata['mime_type'] = _MIMETYPES['PDF'] + + journal_entry.metadata['buddies'] = '' + journal_entry.metadata['icon-color'] = profile.get_color().to_string() + textbuffer = self.textview.get_buffer() + journal_entry.metadata['description'] = \ + textbuffer.get_text(textbuffer.get_start_iter(), + textbuffer.get_end_iter(), True) + if self.exist_cover_image: + image_buffer = self._get_preview_image_buffer() + journal_entry.metadata['preview'] = dbus.ByteArray(image_buffer) + image_buffer = self._get_cover_image_buffer() + journal_entry.metadata['cover_image'] = \ + dbus.ByteArray(base64.b64encode(image_buffer)) + else: + journal_entry.metadata['cover_image'] = "" + + journal_entry.metadata['tags'] = self.source + journal_entry.metadata['source'] = self.source + journal_entry.metadata['author'] = self.selected_author + journal_entry.metadata['publisher'] = self.selected_publisher + journal_entry.metadata['summary'] = self.selected_summary + journal_entry.metadata['language'] = self.selected_language_code + + journal_entry.file_path = tempfile + datastore.write(journal_entry) + os.remove(tempfile) + self.progressbox.hide() + self._object_id = journal_entry.object_id + self._show_journal_alert(_('Download completed'), self.selected_title) + + def _show_journal_alert(self, title, msg): + _stop_alert = Alert() + _stop_alert.props.title = title + _stop_alert.props.msg = msg + open_icon = Icon(icon_name='zoom-activity') + _stop_alert.add_button(Gtk.ResponseType.APPLY, + _('Show in Journal'), open_icon) + open_icon.show() + ok_icon = Icon(icon_name='dialog-ok') + _stop_alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) + ok_icon.show() + # Remove other alerts + for alert in self._alerts: + self.remove_alert(alert) + + self.add_alert(_stop_alert) + _stop_alert.connect('response', self.__stop_response_cb) + _stop_alert.show() + + def __stop_response_cb(self, alert, response_id): + if response_id is Gtk.ResponseType.APPLY: + activity.show_object_in_journal(self._object_id) + self.remove_alert(alert) + + def _get_preview_image_buffer(self): + preview_width, preview_height = style.zoom(300), style.zoom(225) + + pixbuf = self.image.get_pixbuf() + width, height = pixbuf.get_width(), pixbuf.get_height() + + scale = 1 + if (width > preview_width) or (height > preview_height): + scale_x = preview_width / float(width) + scale_y = preview_height / float(height) + scale = min(scale_x, scale_y) + + pixbuf2 = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, + pixbuf.get_has_alpha(), pixbuf.get_bits_per_sample(), + preview_width, preview_height) + pixbuf2.fill(style.COLOR_WHITE.get_int()) + + margin_x = int((preview_width - (width * scale)) / 2) + margin_y = int((preview_height - (height * scale)) / 2) + + pixbuf.scale(pixbuf2, margin_x, margin_y, + preview_width - (margin_x * 2), + preview_height - (margin_y * 2), + margin_x, margin_y, scale, scale, + GdkPixbuf.InterpType.BILINEAR) + + succes, data = pixbuf2.save_to_bufferv('png', [], []) + return data + + def _get_cover_image_buffer(self): + pixbuf = self.image.get_pixbuf() + succes, data = pixbuf.save_to_bufferv('png', [], []) + return data + + def _show_error_alert(self, title, text=None): + alert = NotifyAlert(timeout=20) + alert.props.title = title + alert.props.msg = text + self.add_alert(alert) + alert.connect('response', self._alert_cancel_cb) + alert.show() + + def _alert_cancel_cb(self, alert, response_id): + self.remove_alert(alert) + self.textview.grab_focus() + + def get_entrys_info(self, query): + books = [] + for key in _MIMETYPES.keys(): + books.extend(self.get_entry_info_format(query, _MIMETYPES[key])) + return books + + def get_entry_info_format(self, query, mime): + books = [] + if query is not None and len(query) > 0: + ds_objects, num_objects = datastore.find( + {'mime_type': '%s' % mime, + 'query': '*%s*' % query}) + else: + ds_objects, num_objects = datastore.find( + {'mime_type': '%s' % mime}) + + logging.error('Local search %d books found %s format', num_objects, + mime) + for i in range(0, num_objects): + entry = {} + entry['title'] = ds_objects[i].metadata['title'] + entry['mime'] = ds_objects[i].metadata['mime_type'] + entry['object_id'] = ds_objects[i].object_id + + if 'author' in ds_objects[i].metadata: + entry['author'] = ds_objects[i].metadata['author'] + else: + entry['author'] = '' + + if 'publisher' in ds_objects[i].metadata: + entry['dcterms_publisher'] = \ + ds_objects[i].metadata['publisher'] + else: + entry['dcterms_publisher'] = '' + + if 'language' in ds_objects[i].metadata: + entry['dcterms_language'] = \ + ds_objects[i].metadata['language'] + else: + entry['dcterms_language'] = '' + + if 'source' in ds_objects[i].metadata: + entry['source'] = \ + ds_objects[i].metadata['source'] + else: + entry['source'] = '' + + if entry['source'] in _SOURCES_CONFIG: + repo_configuration = _SOURCES_CONFIG[entry['source']] + summary_field = repo_configuration['summary_field'] + if 'summary' in ds_objects[i].metadata: + entry[summary_field] = ds_objects[i].metadata['summary'] + else: + entry[summary_field] = '' + else: + repo_configuration = None + books.append(opds.Book(repo_configuration, entry, '')) + return books + + def close(self, skip_save=False): + "Override the close method so we don't try to create a Journal entry." + activity.Activity.close(self, True) + + def save(self): + pass + + +class ButtonWithImage(Gtk.Button): + + def __init__(self, label_text): + GObject.GObject.__init__(self,) + self.icon_move_up = Icon(icon_name='go-up') + # self.remove(self.get_children()[0]) + self.hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + self.add(self.hbox) + self.hbox.add(self.icon_move_up) + self.label = Gtk.Label(label=label_text) + self.hbox.add(self.label) + self.show_all() + + def hide_image(self): + self.icon_move_up.hide() + + def show_image(self): + self.icon_move_up.show() + + def set_label(self, text): + self.label.set_text(text) diff --git a/GetIABooksActivity.pyc b/GetIABooksActivity.pyc Binary files differnew file mode 100644 index 0000000..6ca6624 --- /dev/null +++ b/GetIABooksActivity.pyc @@ -0,0 +1,3 @@ +5 + +* Spanish translations (Rafael Ortiz) diff --git a/activity/activity.info b/activity/activity.info new file mode 100644 index 0000000..d8ca7bc --- /dev/null +++ b/activity/activity.info @@ -0,0 +1,8 @@ +[Activity] +name = EBook Reader +bundle_id = uy.ceibal.GetBooksCeibalActivity +icon = get-ia-books +exec = sugar-activity GetIABooksActivity.GetIABooksActivity +show_launcher = yes +activity_version = 5.4 +license = GPLv2+ diff --git a/activity/get-ia-books.svg b/activity/get-ia-books.svg new file mode 100644 index 0000000..33cb4d4 --- /dev/null +++ b/activity/get-ia-books.svg @@ -0,0 +1,312 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<rect y="0" fill="#FFFFFF" width="55" height="55"/>
+<g>
+ <path fill="#FFFFFF" d="M52.708,18.149c0,0.41-0.038,0.835-0.114,1.279c-0.159,0.939-0.545,3.078-1.093,5.768
+ s-1.262,5.93-2.077,9.073c-0.409,1.571-0.84,3.122-1.291,4.562c-0.451,1.442-0.919,2.774-1.393,3.919
+ c-0.235,0.57-0.475,1.094-0.71,1.557c-0.237,0.463-0.474,0.865-0.701,1.194c-0.227,0.336-0.448,0.583-0.642,0.751
+ c-0.194,0.17-0.358,0.261-0.466,0.275c-1.335,0.31-7.109,0.673-13.86,0.673h-0.155c-2.838,0-5.854-0.06-8.825-0.207
+ c-2.971-0.146-5.891-0.378-8.526-0.719c-1.318-0.17-2.565-0.372-3.709-0.6c-1.148-0.229-2.189-0.484-3.098-0.774
+ c-0.913-0.284-1.685-0.611-2.286-0.953c-0.603-0.337-1.034-0.691-1.267-1.033c-0.185-0.216-0.401-1.17-0.401-2.498v-0.148v-0.023
+ c0-4.452,1.63-12.95,4.391-20.312c0.69-1.843,1.451-3.62,2.272-5.246c0.82-1.625,1.701-3.101,2.627-4.345
+ c1.857-2.5,3.872-4.005,5.87-4.124c0.421-0.028,0.92-0.054,1.486-0.071c0.565-0.018,1.198-0.026,1.885-0.026
+ c2.551,0,5.862,0.128,9.386,0.483c3.525,0.355,7.265,0.937,10.668,1.843c1.7,0.452,3.317,0.988,4.777,1.613
+ c1.459,0.625,2.763,1.337,3.843,2.141c1.082,0.81,1.931,1.696,2.513,2.676C52.396,15.861,52.704,16.943,52.708,18.149"/>
+ <path fill="#96BE3D" d="M52.594,19.428c0.076-0.443,0.113-0.869,0.113-1.279c-0.004-1.207-0.311-2.288-0.896-3.271
+ c-0.581-0.98-1.43-1.866-2.513-2.676c-1.079-0.803-2.383-1.516-3.842-2.141C43.997,9.437,42.38,8.9,40.68,8.449
+ c-3.401-0.907-7.143-1.489-10.667-1.844c-3.525-0.355-6.837-0.483-9.387-0.483c-0.688,0-1.32,0.009-1.885,0.026
+ s-1.065,0.042-1.486,0.071c-2,0.119-4.013,1.625-5.87,4.124c-0.926,1.243-1.807,2.72-2.627,4.345
+ c-0.821,1.625-1.583,3.402-2.273,5.246c-2.761,7.361-4.391,15.859-4.391,20.312v0.022v0.148c0,1.329,0.216,2.282,0.401,2.498
+ c0.232,0.342,0.665,0.696,1.267,1.034c0.603,0.34,1.374,0.667,2.286,0.952c0.909,0.289,1.951,0.546,3.098,0.774
+ c1.145,0.228,2.392,0.43,3.71,0.6c2.635,0.341,5.555,0.573,8.526,0.72c2.97,0.147,5.986,0.206,8.824,0.206h0.155
+ c6.75,0,12.525-0.363,13.86-0.674c0.107-0.014,0.271-0.104,0.466-0.274c0.193-0.168,0.415-0.415,0.642-0.75
+ c0.228-0.33,0.464-0.732,0.701-1.195c0.235-0.463,0.475-0.985,0.71-1.557c0.474-1.145,0.941-2.477,1.393-3.919
+ c0.451-1.44,0.882-2.991,1.291-4.562c0.815-3.145,1.529-6.384,2.077-9.074S52.435,20.368,52.594,19.428 M54.006,18.133v0.017
+ c0,0.486-0.042,0.983-0.128,1.495c-0.143,0.837-0.458,2.587-0.903,4.825c-0.448,2.238-1.025,4.959-1.695,7.74
+ c-0.68,2.785-1.435,5.617-2.253,8.089c-0.818,2.474-1.698,4.586-2.627,5.944c-0.272,0.385-0.552,0.727-0.856,0.994
+ c-0.308,0.266-0.646,0.465-1.035,0.562c-0.826,0.181-2.675,0.357-5.181,0.484c-2.505,0.131-5.665,0.217-9.121,0.219
+ c-4.286-0.002-8.975-0.137-13.317-0.496c-4.343-0.361-8.34-0.952-11.235-1.867c-1.935-0.624-3.411-1.359-4.221-2.473
+ c-0.255-0.383-0.409-0.855-0.503-1.418c-0.093-0.562-0.125-1.219-0.133-1.979c0.011-3.533,0.932-9.228,2.582-15.027
+ c1.65-5.803,4.031-11.713,6.964-15.675c0.979-1.314,2.037-2.431,3.172-3.24c1.136-0.813,2.352-1.315,3.652-1.406
+ c0.44-0.032,0.955-0.054,1.534-0.071c0.579-0.017,1.228-0.025,1.925-0.025c3.894,0.011,9.481,0.284,14.981,1.21
+ c5.502,0.926,10.92,2.502,14.471,5.124C52.438,12.907,54.006,15.236,54.006,18.133"/>
+ <path fill="#010101" d="M25.03,35.971h0.243c0.384,0,0.519,0.125,0.519,0.474c0,0.337-0.14,0.461-0.519,0.461H25.03V35.971z
+ M25.273,35.443H25.03v-0.84h0.243c0.312,0,0.428,0.103,0.428,0.376C25.701,35.323,25.588,35.443,25.273,35.443 M25.931,35.686
+ c0.323-0.113,0.481-0.358,0.481-0.743c0-0.616-0.342-0.882-1.14-0.882h-1.369v0.501h0.415v2.384h-0.415v0.501h1.369
+ c0.886,0,1.232-0.275,1.232-0.979C26.505,35.947,26.232,35.769,25.931,35.686"/>
+ <path fill="#010101" d="M27.841,36.945v-1.916h-1.126v0.5h0.414v1.416h-0.414v0.501h1.541v-0.501H27.841z M27.484,34.772
+ c0.229,0,0.417-0.19,0.417-0.425c0-0.233-0.187-0.425-0.417-0.425s-0.415,0.191-0.415,0.425
+ C27.069,34.582,27.255,34.772,27.484,34.772"/>
+ <path fill="#010101" d="M30.17,36.225c0,0.501-0.149,0.754-0.444,0.754c-0.101,0-0.258-0.016-0.318-0.024l-0.013-1.3
+ c0.002-0.001,0.157-0.126,0.371-0.126C30.017,35.528,30.17,35.576,30.17,36.225 M29.951,34.984c-0.263,0-0.454,0.114-0.544,0.178
+ v-1.1h-1.125v0.498h0.413v2.819l0.027,0.005c0.004,0.001,0.539,0.107,0.988,0.107c0.788,0,1.17-0.415,1.17-1.268
+ C30.881,35.4,30.567,34.984,29.951,34.984"/>
+ <polygon fill="#010101" points="32.263,36.947 32.263,34.062 31.138,34.062 31.138,34.562 31.554,34.562 31.554,36.947
+ 31.138,36.947 31.138,37.445 32.679,37.445 32.679,36.947 "/>
+ <path fill="#010101" d="M34.014,36.945V35.03h-1.125v0.498h0.414v1.417h-0.414v0.5h1.539v-0.5H34.014z M33.658,34.772
+ c0.229,0,0.415-0.189,0.415-0.425c0-0.233-0.186-0.425-0.415-0.425c-0.229,0-0.416,0.191-0.416,0.425
+ C33.242,34.583,33.43,34.772,33.658,34.772"/>
+ <path fill="#010101" d="M35.741,36.966c-0.188,0-0.438-0.076-0.438-0.728c0-0.677,0.215-0.733,0.438-0.733
+ c0.237,0,0.436,0.056,0.436,0.733C36.177,36.89,35.929,36.966,35.741,36.966 M35.741,34.984c-0.523,0-1.148,0.218-1.148,1.254
+ c0,0.818,0.397,1.254,1.148,1.254c0.761,0,1.147-0.422,1.147-1.254C36.889,35.404,36.502,34.984,35.741,34.984"/>
+ <path fill="#010101" d="M38.737,36.832c-0.003,0-0.333,0.083-0.435,0.083c-0.084,0-0.124-0.02-0.124-0.123v-1.266h0.536V35.03
+ h-0.536v-0.737h-0.711v0.737h-0.413v0.496h0.413v1.274c0,0.611,0.375,0.691,0.702,0.691c0.301,0,0.575-0.104,0.608-0.14v-0.529
+ L38.737,36.832z"/>
+ <path fill="#010101" d="M40.011,35.469c0.196,0,0.308,0.088,0.326,0.542h-0.686C39.68,35.552,39.79,35.469,40.011,35.469
+ M40.011,34.985c-0.32,0-1.068,0.121-1.068,1.253c0,0.843,0.381,1.254,1.162,1.254c0.396,0,0.743-0.12,0.779-0.158v-0.556
+ l-0.043,0.014c-0.002,0.001-0.419,0.123-0.736,0.123c-0.271,0-0.42-0.143-0.452-0.433h1.379v-0.244
+ C41.031,35.417,40.68,34.985,40.011,34.985"/>
+ <path fill="#010101" d="M42.629,35.966h0.499v-0.033l-0.02-0.839c-0.01-0.005-0.25-0.109-0.621-0.109
+ c-0.255,0-1.084,0.091-1.084,1.268c0,1.111,0.631,1.24,1.106,1.24c0.298,0,0.585-0.103,0.618-0.14v-0.557l-0.041,0.014
+ c-0.005,0.001-0.34,0.105-0.532,0.105c-0.222,0-0.441-0.053-0.441-0.663c0-0.468,0.134-0.704,0.396-0.704
+ c0.042,0,0.09,0.003,0.119,0.005V35.966z"/>
+ <path fill="#010101" d="M44.164,36.698c0-0.247,0.126-0.332,0.498-0.332h0.129l0.014,0.466c-0.001,0-0.179,0.113-0.393,0.113
+ C44.248,36.945,44.164,36.862,44.164,36.698 M45.5,36.945v-1.127c0-0.74-0.486-0.834-0.913-0.834c-0.46,0-0.886,0.146-0.912,0.179
+ v0.558l0.044-0.015c0.003-0.001,0.423-0.137,0.759-0.137c0.215,0,0.312,0.034,0.312,0.243v0.125h-0.382
+ c-0.357,0-0.954,0.104-0.954,0.797c0,0.683,0.506,0.758,0.724,0.758c0.319,0,0.537-0.148,0.626-0.221l0.032,0.148l0.007,0.025
+ h1.073v-0.5H45.5z"/>
+ <path fill="#59595B" d="M31.125,38.555h-0.152v0.94c0.467,0,0.633-0.127,0.633-0.479C31.605,38.658,31.469,38.555,31.125,38.555
+ M30.973,39.703v0.582h0.331v0.208h-0.875v-0.208h0.271v-1.757h-0.271V38.32h0.715c0.441,0,0.733,0.137,0.733,0.685
+ C31.877,39.516,31.563,39.703,30.973,39.703"/>
+ <polygon fill="#59595B" points="32.059,40.493 32.059,40.285 32.332,40.285 32.332,38.528 32.059,38.528 32.059,38.32
+ 32.603,38.32 32.603,40.285 32.875,40.285 32.875,40.493 "/>
+ <path fill="#59595B" d="M34.008,39.745h-0.194c-0.238,0-0.411,0.051-0.411,0.313c0,0.175,0.1,0.244,0.237,0.244
+ c0.198,0,0.368-0.175,0.368-0.175V39.745z M34.037,40.493l-0.029-0.175c0,0-0.146,0.205-0.43,0.205
+ c-0.179,0-0.447-0.084-0.447-0.432c0-0.443,0.342-0.531,0.612-0.531h0.265v-0.166c0-0.22-0.118-0.24-0.303-0.24
+ c-0.146,0-0.377,0.062-0.438,0.08v-0.229c0,0,0.229-0.081,0.479-0.081c0.291,0,0.532,0.078,0.532,0.519v0.843h0.271v0.208H34.037z"
+ />
+ <path fill="#59595B" d="M35.969,40.493v-1.101c0-0.206-0.111-0.221-0.256-0.221c-0.205,0-0.438,0.168-0.438,0.168v0.945h0.271
+ v0.208h-0.814v-0.208h0.273v-1.122h-0.273v-0.208h0.515l0.029,0.192c0,0,0.232-0.224,0.508-0.224c0.265,0,0.459,0.109,0.459,0.477
+ v0.885h0.271v0.208H35.969z"/>
+ <path fill="#59595B" d="M38.121,40.524c-0.354,0-0.747-0.142-0.747-1.117c0-0.979,0.488-1.117,0.758-1.117s0.449,0.09,0.449,0.09
+ v0.532h-0.285v-0.263c0,0-0.06-0.015-0.145-0.015c-0.181,0-0.356,0.152-0.356,0.772c0,0.553,0.131,0.77,0.356,0.77
+ c0.193,0,0.43-0.091,0.43-0.091v0.341C38.581,40.427,38.39,40.524,38.121,40.524"/>
+ <path fill="#59595B" d="M39.442,39.199c-0.182,0-0.246,0.099-0.26,0.398h0.494C39.668,39.284,39.595,39.199,39.442,39.199
+ M39.183,39.863c0.02,0.278,0.187,0.325,0.32,0.325c0.213,0,0.487-0.081,0.487-0.081v0.334c0,0-0.228,0.083-0.487,0.083
+ c-0.333,0-0.74-0.101-0.74-0.801c0-0.631,0.355-0.8,0.68-0.8c0.3,0,0.646,0.137,0.646,0.8v0.14H39.183z"/>
+ <path fill="#59595B" d="M40.768,38.742c-0.141,0-0.25-0.116-0.25-0.256c0-0.139,0.109-0.256,0.25-0.256
+ c0.142,0,0.25,0.117,0.25,0.256C41.018,38.626,40.909,38.742,40.768,38.742 M40.285,40.493V40.21h0.271v-0.974h-0.271v-0.281h0.693
+ v1.255h0.271v0.283H40.285z"/>
+ <path fill="#59595B" d="M42.262,39.237c-0.15,0-0.257,0.088-0.257,0.088v0.888c0,0,0.146,0.018,0.229,0.018
+ c0.151,0,0.314-0.097,0.314-0.516C42.549,39.308,42.458,39.237,42.262,39.237 M42.226,40.524c-0.296,0-0.643-0.07-0.643-0.07v-1.85
+ h-0.271V38.32h0.692v0.745c0,0,0.147-0.142,0.378-0.142c0.221,0,0.59,0.076,0.59,0.791C42.973,40.448,42.52,40.524,42.226,40.524"
+ />
+ <path fill="#59595B" d="M44.135,39.787h-0.105c-0.232,0-0.348,0.049-0.348,0.238c0,0.13,0.075,0.185,0.184,0.185
+ c0.148,0,0.27-0.078,0.27-0.078V39.787z M44.164,40.493l-0.029-0.133c0,0-0.157,0.163-0.424,0.163
+ c-0.196,0-0.452-0.087-0.452-0.474c0-0.414,0.336-0.502,0.604-0.502h0.271v-0.103c0-0.156-0.083-0.179-0.227-0.179
+ c-0.227,0-0.506,0.09-0.506,0.09v-0.336c0,0,0.276-0.097,0.578-0.097c0.312,0,0.577,0.085,0.577,0.525v0.761h0.271v0.283H44.164z"
+ />
+ <polygon fill="#59595B" points="44.949,40.493 44.949,40.21 45.223,40.21 45.223,38.604 44.949,38.604 44.949,38.32 45.644,38.32
+ 45.644,40.21 45.916,40.21 45.916,40.493 "/>
+ <path fill="#87AC3F" d="M16.433,42.058L16.433,42.058c0.572-0.103,0.5-1.419,0.56-1.482c0.077-0.404,1.611,0.919,2.02,0.696
+ C17.261,42.464,16.433,42.058,16.433,42.058"/>
+ <path fill="#49612C" d="M19.006,41.271c-1.15,0.518-2.564,0.781-2.564,0.781s0.231,0.819,1.05,1.001c0,0,0.136,0.063,0.291-0.112
+ C18.759,42.024,19.006,41.271,19.006,41.271"/>
+ <path fill="#87AC3F" d="M16.433,42.058L16.433,42.058c0.572-0.103,0.5-1.419,0.56-1.482c0.077-0.404,1.611,0.919,2.02,0.696
+ C17.261,42.464,16.433,42.058,16.433,42.058"/>
+ <path fill="#49612C" d="M19.006,41.271c-1.15,0.518-2.564,0.781-2.564,0.781s0.231,0.819,1.05,1.001c0,0,0.136,0.063,0.291-0.112
+ C18.759,42.024,19.006,41.271,19.006,41.271"/>
+ <path fill="#96BE3D" d="M22.365,36.19c-0.215,0.368-0.45,0.725-0.68,1.082c-1.242,1.921-2.495,3.981-4.041,5.678
+ c-0.162,0.178-0.718-0.382-1.157-0.826c-1.035-1.441-2.787-3.27-5.713-2.73c2.038-1.732,4.076-3.464,6.115-5.195
+ c2.213-0.942,3.606,1.029,5.414,1.833c0.056,0.023,0.102,0.038,0.142,0.046C22.42,36.108,22.393,36.144,22.365,36.19
+ M14.838,33.023c0.562,0.062,1.072,0.273,1.463,0.845c-2.117,1.797-4.232,3.597-6.349,5.396c-1.634-2.875-3.711-1.786-5.603-1.977
+ c1.714-1.201,3.605-2.508,5.319-3.708c0.437-0.305,0.873-0.609,1.308-0.914c0.035-0.024,0.07-0.049,0.104-0.074
+ c0.144,0.1,0.296,0.184,0.461,0.244c0.041,0.021,0.081,0.039,0.123,0.055c0-0.04,0.159-0.622,0.159-0.622
+ c-0.188-0.066-0.361-0.16-0.514-0.289c-0.104-0.087-0.261-0.134-0.384-0.049c-2.499,1.748-4.998,3.497-7.497,5.245
+ c-0.013,0.008-0.268,0.14-0.268,0.482s0.146,0.425,0.146,0.425c4.771,0.499,5.369,2.236,5.37,2.241h0.012
+ c0,0,0.91-0.332,1.14-0.245c0.231,0.086,0.535,0.672,0.662,0.955c1.462-0.752,5.08,1.659,6.358,2.469
+ c0.346,0.199,0.57,0.292,0.868,0.164c0.39-0.166,0.695-0.638,0.939-0.949c0.664-0.846,1.277-1.732,1.891-2.617
+ c0.667-0.961,1.319-1.936,1.952-2.922c0.206-0.322,0.694-0.862,0.686-1.279c-0.002-0.146-0.096-0.262-0.232-0.306
+ c-1.28-0.409-2.179-1.533-3.46-1.989c-0.932-0.331-1.75-0.372-2.64-0.061c-0.435-0.649-1.076-1.024-1.875-1.135
+ C14.978,32.408,14.854,33.023,14.838,33.023"/>
+ <path fill="#E22F35" d="M26.545,9.928c-3.467,0.226-6.526,11.742-6.89,16.434c-1.124-0.374-2.68-0.406-3.229-0.369
+ c-1.153,0.076-2.166,4.095-2.198,5.42c-0.38-0.13-0.877-0.168-1.194-0.171c0.233-0.486,0.51-1.896,0.543-2.092
+ c0.14-0.821-1.753-0.889-2.213-0.858c-0.655,0.043-1.218,2.657-1.062,2.879c0.198,0.279,1.553,0.3,2.234,0.27
+ c-0.364,0.46-0.646,1.631-0.669,2.117c-0.29-0.206-0.943-0.224-1.14-0.21c-0.378,0.023-0.703,1.532-0.613,1.659
+ c0.132,0.186,1.158,0.172,1.441,0.145c-0.129,0.236-0.231,0.616-0.271,0.875c-0.158-0.145-0.586-0.159-0.712-0.149
+ c-0.228,0.016-0.424,0.925-0.368,1.002c0.086,0.123,0.821,0.101,0.906,0.082c0.064-0.014,0.159-0.415,0.205-0.641
+ c0.201,0.137,1.085,0.112,1.195,0.087c0.116-0.026,0.298-0.956,0.317-1.066c0.066-0.39-0.829-0.422-1.046-0.407
+ c-0.018,0.001-0.033,0.008-0.049,0.016c0.123-0.335,0.251-0.994,0.271-1.104c0.461,0.217,1.971,0.171,2.163,0.128
+ c0.198-0.047,0.503-1.529,0.574-1.906c1.24,0.412,4.378,0.31,4.8,0.216c0.346-0.079,0.835-2.062,1.122-3.398
+ c3.462,1.724,14.649,2.187,16.848,1.27c2.455-1.024,4.288-13.681,4.54-15.163C42.943,9.761,29.477,9.73,26.545,9.928"/>
+ <path fill="#FFFFFF" d="M34.715,18.167c0.063-0.022,0.146-0.098,0.234-0.134c0.043,0.005,0.075-0.008,0.11-0.028
+ c0.175-0.006,0.351-0.038,0.526-0.045c0.081,0.033,0.167,0.021,0.252,0.018c-0.017-0.102-0.011-0.193-0.029-0.303
+ c-0.07,0.011-0.152-0.05-0.211-0.025c0.005-0.023,0.004-0.007-0.022-0.01c-0.022-0.002-0.03-0.001-0.05-0.004
+ c-0.055-0.005-0.127-0.007-0.178,0.015c-0.114-0.024-0.236,0.021-0.354,0.026c-0.136,0.078-0.3,0.118-0.417,0.231
+ c-0.012,0.004-0.022,0.001-0.036,0.017c0.015,0.108,0.042,0.234,0.076,0.333C34.653,18.231,34.711,18.197,34.715,18.167"/>
+ <path fill="#FFFFFF" d="M35.382,18.208c-0.118-0.028-0.205-0.002-0.315,0.029c-0.131,0.038-0.269,0.21-0.405,0.247
+ c0.017,0.083,0.033,0.165,0.061,0.249c0.112,0.03,0.084,0.172,0.161,0.257c0.079,0.004,0.156-0.032,0.229-0.048
+ c0.048-0.01,0.102-0.014,0.151-0.021c0.088-0.009,0.165-0.033,0.255-0.052c0.044-0.01,0.088-0.021,0.13-0.041
+ c0.082,0.007,0.163-0.005,0.244-0.009c-0.01-0.126,0.021-0.248-0.023-0.377c0.008-0.069-0.015-0.141-0.022-0.211
+ C35.69,18.191,35.535,18.203,35.382,18.208"/>
+ <path fill="#FFFFFF" d="M27.047,19.559c-0.123,0.013-0.252-0.002-0.375,0.016c-0.053,0.008-0.102,0.04-0.15,0.045
+ c-0.069,0.009-0.139-0.012-0.209,0c-0.195,0.03-0.426,0.133-0.57,0.208c-0.246,0.135-0.358,0.254-0.508,0.496
+ c-0.091,0.146-0.265,0.326-0.279,0.449c-0.014,0.121,0.005,0.328,0.011,0.42c0.007,0.126,0.093,0.274,0.149,0.404
+ c0.06,0.14,0.127,0.266,0.21,0.344c0.322,0.304,1.058,0.522,1.646,0.36c0.058-0.017,0.109-0.053,0.135-0.061
+ c0.108-0.029,0.221-0.028,0.313-0.075c0.27-0.386,0.496-0.84,0.735-1.229c0.246-0.393,0.448-0.785,0.63-1.227
+ c-0.521-0.141-1.081-0.196-1.617-0.298C27.122,19.437,27.105,19.545,27.047,19.559"/>
+ <path fill="#FFFFFF" d="M34.632,14.576c0.031,0.33,0.099,0.635,0.152,0.966c0.056,0.186,0.06,0.357,0.116,0.534
+ c-0.01,0.056,0.044,0.118,0.021,0.174c0.018,0.035,0.02,0.051,0.023,0.087c0.01,0.08,0.035,0.148,0.044,0.221
+ c0.009,0.059,0.019,0.09,0.026,0.137c0.003,0.034,0.019,0.082,0.021,0.12c0.007,0.045,0.003,0.087,0.005,0.131
+ c0.033,0.033,0.015,0.12,0.034,0.151c-0.01,0.067,0.014,0.137,0.014,0.205c0.084-0.013,0.194-0.047,0.291-0.068
+ c-0.001-0.107-0.004-0.184-0.052-0.272c-0.01-0.167-0.095-0.339-0.1-0.505c-0.04-0.043-0.021-0.142-0.073-0.215
+ c-0.016-0.117-0.054-0.22-0.091-0.347c0.02-0.159-0.113-0.362-0.129-0.52c-0.008-0.018-0.018-0.008-0.025-0.022
+ c0.004-0.071-0.041-0.124-0.052-0.19c-0.005-0.013,0.009-0.028,0.003-0.044c-0.025-0.113-0.111-0.227-0.131-0.346
+ c0.001,0.005,0.009-0.047,0.005-0.063c-0.035-0.195-0.147-0.4-0.173-0.584c-0.009,0.057,0.011,0.116,0.028,0.174
+ C34.577,14.39,34.601,14.483,34.632,14.576"/>
+ <path fill="#FFFFFF" d="M35.62,19.721c-0.037,0.114-0.053,0.258,0.008,0.359c-0.048-0.009-0.032,0.047-0.034,0.077
+ c0.018-0.01,0.032-0.001,0.047-0.002c-0.003-0.016-0.019-0.033,0.011-0.045c0.02,0.061,0.04,0.15-0.06,0.147
+ c0.03,0.028,0.051,0.036,0.07,0.041c-0.024,0.016-0.045,0.009-0.068,0.032c0.021,0.043-0.014,0.084,0.009,0.126
+ c0.01-0.005,0.04-0.036,0.065-0.006c-0.006,0.04-0.053,0.039-0.078,0.052c0.013,0.079,0.054,0.208,0.128,0.258
+ c-0.014,0.022-0.026,0.046-0.053,0.067c0.017,0.19,0.087,0.357,0.121,0.549c-0.016,0.018-0.02,0.074,0.015,0.074
+ c-0.01-0.279,0.09-0.55,0.1-0.828c-0.022,0.008-0.046,0.014-0.066-0.005c-0.005-0.047,0.043-0.098,0.097-0.104
+ c-0.008-0.053,0.027-0.104,0.012-0.158c-0.019-0.01-0.042,0.032-0.062,0.014c-0.007-0.01-0.016-0.019-0.023-0.028
+ c0.009-0.026,0.033-0.047,0.04-0.071c0.032-0.013,0.066,0.03,0.083-0.019c-0.017-0.023-0.036,0-0.052-0.019
+ c0.019-0.012-0.009-0.027,0.003-0.039c0.008,0.012,0.053-0.026,0.043-0.037c-0.017,0.018-0.033,0.01-0.045-0.011
+ c-0.008-0.021,0.005-0.044,0.03-0.063c-0.062-0.044,0.049-0.071,0.004-0.114c-0.029,0.007-0.059,0.034-0.087,0
+ c0.055-0.024,0.033-0.083,0.075-0.101c-0.037-0.032-0.075-0.05-0.115-0.036C35.86,19.799,35.637,19.751,35.62,19.721"/>
+ <path fill="#FFFFFF" d="M36.858,24.864c-0.015,0.042-0.071,0.074-0.053,0.142c-0.031,0.014,0.015-0.008,0.006,0.012
+ c-0.075,0.133-0.089,0.333-0.115,0.458c-0.064,0.059-0.081,0.122-0.158,0.162c0.058,0.103-0.085,0.21-0.113,0.303
+ c-0.021,0.072-0.014,0.156-0.029,0.231c-0.131,0.617-0.539,1.113-0.84,1.499c0.017,0.032,0.003,0.073,0.01,0.112
+ c0.014,0.099,0.047,0.187,0.024,0.301c-0.02,0.104-0.059,0.236-0.119,0.301c-0.009,0.136-0.039,0.093-0.125,0.168
+ c-0.081,0.072-0.13,0.091-0.236,0.135c-0.095,0.038-0.203,0.081-0.325,0.094c-0.087,0.008-0.268-0.03-0.317-0.052
+ c-0.133-0.059-0.23-0.161-0.3-0.276c-0.061-0.104-0.088-0.188-0.101-0.338c-0.01-0.118-0.035-0.064-0.004-0.2
+ c0.022-0.098,0.044-0.178,0.081-0.254c0.103-0.212,0.257-0.303,0.459-0.374c0.091-0.03,0.213-0.055,0.334-0.046
+ c0.049,0.004,0.128,0.018,0.19,0.048c0.043,0.021,0.059,0.062,0.091,0.078c0.015,0.007,0.209,0.126,0.232,0.164
+ c0.135-0.072,0.203-0.246,0.282-0.397c0.125-0.244,0.233-0.516,0.284-0.752c0.021-0.101,0.036-0.183,0.045-0.282
+ c0.001-0.028,0.018-0.059,0.02-0.087c0.001-0.03-0.009-0.059-0.005-0.084c0.01-0.072-0.115-0.26-0.103-0.312
+ c-0.083-0.064-0.159-0.049-0.249-0.071c-0.274-0.067-0.539-0.176-0.831-0.271c-0.145-0.046-0.325-0.079-0.494-0.16
+ c-0.059-0.027-0.12-0.07-0.201-0.113c-0.079-0.042-0.202-0.152-0.263-0.15c-0.107,0.002-0.165,0.265-0.191,0.398
+ c-0.107,0.557-0.364,1.079-0.629,1.424c0.073,0.125,0.155,0.33,0.13,0.534c-0.018,0.146-0.052,0.296-0.131,0.379
+ c-0.002,0.217-0.14,0.198-0.257,0.303c-0.021,0.007-0.048,0.01-0.071,0.02c-0.013,0.006-0.02,0.023-0.032,0.028
+ c-0.053,0.021-0.135,0.033-0.186,0.074c-0.09-0.009-0.198,0.045-0.302,0.035c-0.072-0.007-0.15-0.05-0.205-0.023
+ c-0.032-0.036-0.086-0.036-0.133-0.062c-0.116-0.06-0.172-0.125-0.245-0.234c-0.076-0.117-0.11-0.201-0.132-0.354
+ c-0.013-0.083-0.021-0.143-0.014-0.243c0.008-0.078,0.052-0.155,0.033-0.239c0.012-0.012,0.018-0.016,0.021-0.018
+ c0.002-0.004,0.003-0.012,0.009-0.03c0.008-0.021,0.025-0.046,0.038-0.073c0.073-0.165,0.213-0.29,0.364-0.359
+ c0.013-0.007,0.035-0.004,0.059-0.014c0.034-0.015,0.101-0.054,0.144-0.064c0.015-0.003,0.038,0.007,0.055,0.005
+ c0.014-0.004,0.021-0.019,0.031-0.02c0.038-0.003,0.078,0.004,0.12,0.002c0.062-0.002,0.119-0.02,0.191,0.001
+ c0.048,0.015,0.104,0.057,0.146,0.082c0.047,0.029,0.191,0.131,0.229,0.165c0.047-0.029,0.07-0.083,0.097-0.132
+ c0.062-0.119,0.115-0.241,0.161-0.428c0.021-0.09,0.044-0.162,0.053-0.253c0.007-0.064,0.029-0.143,0.035-0.212
+ c0.004-0.031-0.009-0.063-0.004-0.093c0.007-0.037,0.033-0.083,0.038-0.12c0.005-0.045-0.009-0.092-0.002-0.138
+ c0.008-0.081,0.044-0.159,0.061-0.241c0.023-0.125-0.076-0.313-0.071-0.43c0.002-0.075,0.018-0.136,0.019-0.225
+ c0-0.006-0.011-0.027-0.01-0.029c0-0.008,0.017-0.017,0.017-0.033c0-0.025-0.01-0.051-0.009-0.075
+ c0.007-0.123,0.03-0.243,0.022-0.353c-0.002-0.053-0.03-0.103,0-0.183c0.078-0.202,0.312-0.183,0.506-0.067
+ c0.046,0.028,0.085,0.077,0.13,0.096c0.044,0.02,0.09-0.001,0.139,0.034c0.03,0.024,0.01,0.023,0.048,0.031
+ c0.022,0.005,0.022,0.022,0.039,0.028c0.056,0.022,0.137,0.033,0.218,0.082c0.064-0.015,0.055,0.023,0.123,0.021
+ c0.031,0.032,0.088,0.05,0.128,0.077c0.043,0.021,0.005-0.021,0.039-0.008c0.035,0.04,0.108,0.034,0.137,0.042
+ c0.039,0.015,0.09,0.031,0.145,0.045c0.037,0.011,0.075,0.028,0.11,0.037c0.011,0.002,0.019-0.013,0.03-0.012
+ c0.02,0.002,0.12,0.032,0.107,0.046c0.018-0.007,0.08-0.005,0.079,0.02c0.028-0.015,0.06,0.011,0.088-0.023
+ c0.066,0.035,0.131,0.03,0.183,0.036c0.019,0.009-0.001-0.036,0.013-0.007c0.053,0.019,0.093,0.001,0.137-0.002
+ c0.019-0.001,0.039,0.006,0.055,0.004c0.019-0.002,0.037-0.023,0.054-0.023c0.018-0.002,0.053,0.017,0.076,0.019
+ c0.016,0.001,0.021-0.012,0.039-0.008c0.078,0.01,0.144-0.004,0.229,0c0.074-0.006,0.125-0.052,0.194-0.043
+ c0.025,0.004,0.119,0.039,0.168,0.069c0.003,0.002-0.006,0.015,0.004,0.019c0.011,0.005,0.018,0.004,0.039,0.029
+ c0.024,0.029,0.059,0.068,0.092,0.069c0.029,0.05,0.054,0.111,0.078,0.166c0.008,0.015,0.024,0.022,0.029,0.034
+ c0.015,0.04,0.011,0.088,0.045,0.113c-0.008,0.061-0.001,0.113,0.003,0.167C36.852,24.765,36.874,24.82,36.858,24.864"/>
+ <path fill="#FFFFFF" d="M31.166,18.87c-0.021,0.048-0.054,0.091-0.077,0.135c-0.022,0.055-0.021,0.109-0.044,0.165
+ c-0.033,0.091-0.089,0.188-0.135,0.27c-0.193,0.357-0.402,0.702-0.612,1.034c-0.22,0.344-0.414,0.696-0.615,1.033
+ c-0.159,0.271-0.297,0.514-0.434,0.808c-0.068,0.153-0.099,0.309-0.195,0.435c-0.025,0.208-0.124,0.493-0.06,0.734
+ c0.042,0.148,0.134,0.355,0.225,0.39c0.053,0.02,0.042-0.007,0.076-0.015c0.009-0.003,0.024,0.022,0.045,0.015
+ c0.006-0.003,0.011-0.028,0.015-0.031c0.063-0.017,0.131-0.021,0.179-0.043c0.132-0.062,0.221-0.182,0.344-0.225
+ c0.031-0.062,0.07-0.107,0.105-0.166c0.061-0.098,0.07-0.141,0.15-0.209c0.109-0.091,0.345-0.068,0.496,0.015
+ c0.027,0.016,0.027,0.052,0.059,0.074c0.028,0.022,0.064,0.026,0.089,0.045c0.071,0.056,0.128,0.093,0.134,0.134
+ c0.023,0.115-0.083,0.228-0.148,0.3c-0.08,0.085-0.168,0.144-0.226,0.225c-0.138,0.154-0.296,0.292-0.435,0.449
+ c-0.14,0.056-0.242,0.18-0.374,0.255c-0.138,0.077-0.292,0.111-0.418,0.209c-0.273,0.014-0.569,0.183-0.75,0.015
+ c-0.103,0.04-0.18-0.041-0.314-0.015c-0.197-0.101-0.37-0.281-0.569-0.405c-0.066-0.042-0.114-0.138-0.18-0.209
+ c-0.054-0.058-0.136-0.087-0.182-0.135c-0.052-0.058-0.09-0.166-0.147-0.254c-0.055-0.082-0.138-0.157-0.166-0.225
+ c-0.064-0.158-0.025-0.347-0.03-0.539c-0.153-0.039-0.309-0.024-0.465-0.015c-0.167,0.01-0.297,0.059-0.509,0.044
+ c-0.068-0.005-0.139-0.035-0.208-0.044c-0.204-0.031-0.365-0.05-0.541-0.105c-0.058-0.02-0.104-0.06-0.165-0.076
+ c-0.081-0.02-0.164-0.011-0.239-0.029c-0.071-0.018-0.124-0.048-0.195-0.075c-0.154-0.057-0.313-0.081-0.448-0.149
+ c-0.114-0.058-0.169-0.183-0.302-0.196c-0.124-0.125-0.255-0.249-0.375-0.419c-0.022-0.032-0.033-0.071-0.058-0.104
+ c-0.025-0.031-0.053-0.056-0.074-0.09c-0.045-0.064-0.071-0.141-0.106-0.224c-0.035-0.078-0.148-0.099-0.164-0.166
+ c-0.017-0.071,0.057-0.214,0.042-0.298c-0.008-0.058-0.04-0.123-0.043-0.181c-0.008-0.102,0.026-0.224,0.029-0.345
+ c0.006-0.125-0.01-0.257,0.014-0.359c0.053-0.204,0.219-0.36,0.242-0.569c0.375-0.443,0.85-0.788,1.363-1.094
+ c1.032-0.185,2.383,0.166,3.4,0.3c0.283,0.038,0.687,0.042,0.897-0.104c0.104-0.072,0.136-0.196,0.241-0.285
+ c0.071-0.215,0.139-0.416,0.224-0.631c0.048-0.119,0.076-0.199,0.122-0.357c0.038-0.144,0.039-0.269,0.013-0.465
+ c-0.035-0.264-0.098-0.402-0.283-0.584c-0.07-0.067-0.077-0.071-0.166-0.135c-0.064-0.046-0.119-0.064-0.225-0.118
+ c-0.047-0.026-0.092-0.071-0.134-0.091c-0.068-0.031-0.151-0.037-0.225-0.06c-0.191-0.061-0.404-0.127-0.63-0.076
+ c-0.021,0.106,0.013,0.231,0,0.345c-0.012,0.106-0.099,0.333-0.165,0.464c-0.055,0.11-0.121,0.201-0.195,0.299
+ c-0.127,0.174-0.257,0.251-0.525,0.315c-0.068,0.017-0.16,0.03-0.224,0.045c-0.07,0.015-0.146,0.001-0.225,0.03
+ c-0.244-0.086-0.5-0.16-0.689-0.3c-0.081-0.186-0.223-0.304-0.241-0.524c-0.005-0.085,0.01-0.243,0.032-0.33
+ c0.065-0.268,0.328-0.653,0.538-0.809c0.14-0.103,0.323-0.122,0.525-0.193c0.106-0.04,0.219-0.102,0.314-0.122
+ c0.046-0.008,0.121,0.008,0.18,0c0.156-0.018,0.334-0.05,0.524-0.044c0.179,0.007,0.411,0.038,0.584,0.076
+ c0.023,0.005,0.035,0.026,0.06,0.03c0.17,0.025,0.409,0.143,0.6,0.224c0.178,0.077,0.357,0.163,0.523,0.241
+ c0.354,0.162,0.624,0.435,0.884,0.613c0.14,0.015,0.25,0.131,0.361,0.224c0.184,0.157,0.298,0.313,0.401,0.569
+ c0.02,0.046,0.111,0.1,0.13,0.149C31.581,17.811,31.361,18.421,31.166,18.87"/>
+ <path fill="#E22F35" d="M27.047,19.559c-0.123,0.013-0.252-0.002-0.375,0.016c-0.053,0.008-0.102,0.04-0.15,0.045
+ c-0.069,0.009-0.139-0.012-0.209,0c-0.195,0.03-0.426,0.133-0.57,0.208c-0.246,0.135-0.358,0.254-0.508,0.496
+ c-0.091,0.146-0.265,0.326-0.279,0.449c-0.014,0.121,0.005,0.328,0.011,0.42c0.007,0.126,0.093,0.274,0.149,0.404
+ c0.06,0.14,0.127,0.266,0.21,0.344c0.322,0.304,1.058,0.522,1.646,0.36c0.058-0.017,0.109-0.053,0.135-0.061
+ c0.108-0.029,0.221-0.028,0.313-0.075c0.27-0.386,0.496-0.84,0.735-1.229c0.246-0.393,0.448-0.785,0.63-1.227
+ c-0.521-0.141-1.081-0.196-1.617-0.298C27.122,19.437,27.105,19.545,27.047,19.559"/>
+ <path fill="#FFFFFF" d="M34.106,14.423c0.029-0.075,0.016-0.153,0.031-0.229c-0.015-0.085-0.006-0.17,0.012-0.252
+ c-0.027-0.092-0.001-0.196-0.001-0.3c0.001-0.075-0.024-0.152-0.025-0.222c0-0.03,0.009-0.064,0.009-0.099
+ c0-0.115,0.024-0.235,0.029-0.356c-0.044-0.091,0.002-0.174-0.027-0.264c0.013-0.047,0.009-0.095-0.002-0.145
+ c0.007-0.095,0.032-0.206,0.023-0.296c-0.005-0.005,0.001-0.006,0.003-0.004c0.014-0.078,0.016-0.159,0.028-0.24
+ c-0.02,0.004-0.01-0.013-0.017-0.027c-0.028-0.051-0.079-0.097-0.048-0.148c0.079-0.039,0.117-0.172,0.243-0.176
+ c0.04,0.024,0.063,0.046,0.094,0.069c0,0.049-0.017,0.097-0.033,0.146c0.021,0.046,0.039,0.088,0.058,0.114
+ C34.485,12,34.473,11.999,34.473,12c0.031,0.051,0.084,0.069,0.073,0.127c0.069,0.104,0.104,0.239,0.157,0.362
+ c-0.017,0.008,0,0.019-0.016,0.026c0.054,0.1,0.086,0.197,0.141,0.308c0.048,0.099,0.077,0.211,0.119,0.31
+ c0.027,0.063,0.062,0.125,0.084,0.188c0.024,0.081,0.021,0.167,0.07,0.234c0.012,0.081,0.052,0.214,0.086,0.296
+ c0.002,0.089,0.046,0.192,0.068,0.263c-0.006,0.027-0.002,0.076,0.021,0.093c0.028,0.084,0.001,0.152,0.062,0.232
+ c0.009,0.13,0.088,0.265,0.079,0.393c0.009,0.015,0.009,0.016,0.021,0.024c-0.001,0.035,0.018,0.049,0.016,0.085
+ c0.041,0.067,0.026,0.155,0.055,0.232c0.057,0.079,0.07,0.188,0.069,0.275c0.009,0.008,0.016,0.016,0.022,0.026
+ c-0.001,0.024-0.004,0.061,0.016,0.076c0.002,0.047,0.015,0.095,0.025,0.14c0.007,0.033,0.039,0.079,0.044,0.109
+ c0.007,0.047,0.018,0.115,0.03,0.169c0.021,0.089,0.032,0.207,0.078,0.317c0.008,0.113,0.044,0.228,0.045,0.33
+ c0.032,0.07,0.03,0.133,0.029,0.193c0.004,0.004,0.008-0.003,0.012-0.003c0,0.074,0.05,0.136,0.04,0.204
+ c0.023,0.02,0.001,0.029,0.021,0.043c-0.001,0.005-0.005,0.012-0.012,0.018c0.027,0.14,0.043,0.276,0.045,0.414
+ c0.029,0.025,0.041,0.062,0.037,0.101c-0.023,0.003-0.002,0.019-0.021,0.033c0.011,0.028-0.006,0.07,0.02,0.088
+ c-0.016,0.073,0.024,0.149,0.002,0.22c0.017,0.011,0.009,0.021,0.021,0.032c-0.025-0.001-0.003,0.027-0.007,0.041
+ c0.014,0.009,0.009,0.019,0.027,0.018c0.009,0.027,0.031,0.052,0.031,0.078c0.002,0.052-0.049,0.083-0.045,0.129
+ c0.001,0.031-0.003,0.072,0.005,0.107c0.015,0.058,0.014,0.128,0.032,0.181c-0.013,0.023-0.005,0.047,0.006,0.072
+ c-0.036,0.099,0.021,0.208-0.036,0.308c-0.012,0.016-0.025,0.016-0.038,0.026c-0.011,0.037,0.021,0.098,0.056,0.126
+ c0,0.015,0.005,0.028,0,0.042c0.049,0.071,0.042,0.167,0.077,0.25c-0.004,0.091,0.049,0.19,0.081,0.286l0.091,0.202
+ c-0.011-0.001-0.021-0.001-0.033,0c0.011,0.027,0.046,0.038,0.06,0.062c-0.02,0.015-0.02,0.01-0.033,0.027
+ c0.005,0.01,0.012,0.012,0.019,0.005c-0.005,0.016,0,0.034-0.008,0.049c0.078,0.278,0.04,0.547,0.059,0.82
+ c-0.007,0.015-0.002,0.032-0.014,0.047c0.004,0.005,0.01,0.01,0.013,0.018c-0.029,0.025-0.008,0.064-0.012,0.102
+ c-0.002,0.022-0.014,0.065-0.02,0.092c-0.009,0.04-0.031,0.079-0.023,0.123c-0.014,0.021-0.011,0.041-0.025,0.062
+ c0,0.056-0.026,0.109-0.021,0.166c-0.072,0.192-0.1,0.422-0.246,0.603c-0.027,0.034-0.062,0.061-0.09,0.095
+ c-0.042,0.052-0.095,0.125-0.156,0.168c-0.035-0.011-0.07,0.014-0.103-0.014c-0.004,0.003,0.001,0.009,0.004,0.012
+ c-0.054,0.002-0.1-0.032-0.147-0.067c-0.012-0.065-0.086-0.084-0.126-0.124c-0.118-0.044-0.224-0.165-0.343-0.269
+ c-0.016-0.033-0.034-0.084-0.068-0.09c-0.045-0.069-0.072-0.137-0.108-0.207c-0.029-0.047-0.07-0.081-0.09-0.121
+ c-0.015-0.036-0.02-0.08-0.035-0.118c-0.035-0.089-0.09-0.181-0.089-0.28c-0.079-0.23-0.097-0.456-0.102-0.679
+ c0.022-0.072,0.007-0.148,0.008-0.223c0-0.044,0.03-0.093-0.003-0.144c0.021-0.159,0.017-0.319,0.062-0.478
+ c0.009-0.127-0.001-0.259,0.054-0.383c-0.018-0.189-0.126-0.375-0.165-0.571c-0.013-0.015-0.025-0.018-0.037-0.02
+ c-0.019-0.037-0.024-0.073,0.003-0.105c-0.046-0.138-0.063-0.248-0.107-0.385c0.006-0.052-0.008-0.106-0.031-0.163
+ c0.006-0.024,0.001-0.049-0.016-0.077c-0.043-0.327-0.093-0.635-0.155-0.965c-0.011-0.271-0.02-0.543-0.052-0.818
+ c0.007-0.014,0.003-0.028,0.015-0.041c-0.028-0.04-0.001-0.074-0.032-0.113c-0.002-0.209-0.053-0.424-0.012-0.63
+ c-0.018-0.104-0.003-0.204,0.001-0.308c-0.011-0.114-0.041-0.231-0.001-0.34C34.098,14.506,34.126,14.466,34.106,14.423"/>
+ <path fill="#E22F35" d="M34.715,18.167c0.063-0.022,0.146-0.098,0.234-0.134c0.043,0.005,0.075-0.008,0.11-0.028
+ c0.175-0.006,0.351-0.038,0.526-0.045c0.081,0.033,0.167,0.021,0.252,0.018c-0.017-0.102-0.011-0.193-0.029-0.303
+ c-0.07,0.011-0.152-0.05-0.211-0.025c0.005-0.023,0.004-0.007-0.022-0.01c-0.022-0.002-0.03-0.001-0.05-0.004
+ c-0.055-0.005-0.127-0.007-0.178,0.015c-0.114-0.024-0.236,0.021-0.354,0.026c-0.136,0.078-0.3,0.118-0.417,0.231
+ c-0.012,0.004-0.022,0.001-0.036,0.017c0.015,0.108,0.042,0.234,0.076,0.333C34.653,18.231,34.711,18.197,34.715,18.167"/>
+ <path fill="#E22F35" d="M35.382,18.208c-0.118-0.028-0.205-0.002-0.315,0.029c-0.131,0.038-0.269,0.21-0.405,0.247
+ c0.017,0.083,0.033,0.165,0.061,0.249c0.112,0.03,0.084,0.172,0.161,0.257c0.079,0.004,0.156-0.032,0.229-0.048
+ c0.048-0.01,0.102-0.014,0.151-0.021c0.088-0.009,0.165-0.033,0.255-0.052c0.044-0.01,0.088-0.021,0.13-0.041
+ c0.082,0.007,0.163-0.005,0.244-0.009c-0.01-0.126,0.021-0.248-0.023-0.377c0.008-0.069-0.015-0.141-0.022-0.211
+ C35.69,18.191,35.535,18.203,35.382,18.208"/>
+ <path fill="#E22F35" d="M34.632,14.576c0.031,0.33,0.099,0.635,0.152,0.966c0.056,0.186,0.06,0.357,0.116,0.534
+ c-0.01,0.056,0.044,0.118,0.021,0.174c0.018,0.035,0.02,0.051,0.023,0.087c0.01,0.08,0.035,0.148,0.044,0.221
+ c0.009,0.059,0.019,0.09,0.026,0.137c0.003,0.034,0.019,0.082,0.021,0.12c0.007,0.045,0.003,0.087,0.005,0.131
+ c0.033,0.033,0.015,0.12,0.034,0.151c-0.01,0.067,0.014,0.137,0.014,0.205c0.084-0.013,0.194-0.047,0.291-0.068
+ c-0.001-0.107-0.004-0.184-0.052-0.272c-0.01-0.167-0.095-0.339-0.1-0.505c-0.04-0.043-0.021-0.142-0.073-0.215
+ c-0.016-0.117-0.054-0.22-0.091-0.347c0.02-0.159-0.113-0.362-0.129-0.52c-0.008-0.018-0.018-0.008-0.025-0.022
+ c0.004-0.071-0.041-0.124-0.052-0.19c-0.005-0.013,0.009-0.028,0.003-0.044c-0.025-0.113-0.111-0.227-0.131-0.346
+ c0.001,0.005,0.009-0.047,0.005-0.063c-0.035-0.195-0.147-0.4-0.173-0.584c-0.009,0.057,0.011,0.116,0.028,0.174
+ C34.577,14.39,34.601,14.483,34.632,14.576"/>
+ <path fill="#E22F35" d="M35.62,19.721c-0.037,0.114-0.053,0.258,0.008,0.359c-0.048-0.009-0.032,0.047-0.034,0.077
+ c0.018-0.01,0.032-0.001,0.047-0.002c-0.003-0.016-0.019-0.033,0.011-0.045c0.02,0.061,0.04,0.15-0.06,0.147
+ c0.03,0.028,0.051,0.036,0.07,0.041c-0.024,0.016-0.045,0.009-0.068,0.032c0.021,0.043-0.014,0.084,0.009,0.126
+ c0.01-0.005,0.04-0.036,0.065-0.006c-0.006,0.04-0.053,0.039-0.078,0.052c0.013,0.079,0.054,0.208,0.128,0.258
+ c-0.014,0.022-0.026,0.046-0.053,0.067c0.017,0.19,0.087,0.357,0.121,0.549c-0.016,0.018-0.02,0.074,0.015,0.074
+ c-0.01-0.279,0.09-0.55,0.1-0.828c-0.022,0.008-0.046,0.014-0.066-0.005c-0.005-0.047,0.043-0.098,0.097-0.104
+ c-0.008-0.053,0.027-0.104,0.012-0.158c-0.019-0.01-0.042,0.032-0.062,0.014c-0.007-0.01-0.016-0.019-0.023-0.028
+ c0.009-0.026,0.033-0.047,0.04-0.071c0.032-0.013,0.066,0.03,0.083-0.019c-0.017-0.023-0.036,0-0.052-0.019
+ c0.019-0.012-0.009-0.027,0.003-0.039c0.008,0.012,0.053-0.026,0.043-0.037c-0.017,0.018-0.033,0.01-0.045-0.011
+ c-0.008-0.021,0.005-0.044,0.03-0.063c-0.062-0.044,0.049-0.071,0.004-0.114c-0.029,0.007-0.059,0.034-0.087,0
+ c0.055-0.024,0.033-0.083,0.075-0.101c-0.037-0.032-0.075-0.05-0.115-0.036C35.86,19.799,35.637,19.751,35.62,19.721"/>
+</g>
+</svg>
diff --git a/application-ogg.png b/application-ogg.png Binary files differnew file mode 100644 index 0000000..9498758 --- /dev/null +++ b/application-ogg.png diff --git a/devicemanager.py b/devicemanager.py new file mode 100644 index 0000000..c86c8eb --- /dev/null +++ b/devicemanager.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python + +# Copyright (C) 2009 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 os +import logging + +from gi.repository import GObject +from gi.repository import Gio + + +class DeviceManager(GObject.GObject): + + __gsignals__ = { + 'device-changed': (GObject.SignalFlags.RUN_FIRST, + None, + ([])), + } + + def __init__(self): + GObject.GObject.__init__(self) + + self._devices = {} + + self.volume_monitor = Gio.VolumeMonitor.get() + self.volume_monitor.connect('mount-added', self._mount_added_cb) + self.volume_monitor.connect('mount-removed', self._mount_removed_cb) + + self._populate_devices() + + def _populate_devices(self): + for mount in self.volume_monitor.get_mounts(): + props = self._get_props_from_device(mount) + if mount.can_eject() and props['have_catalog']: + self._devices[mount] = props + + def _get_props_from_device(self, mount): + props = {} + props['removable'] = True + props['mounted'] = True + props['mount_path'] = mount.get_default_location().get_path() + props['label'] = mount.get_name() + # FIXME: get the proper size here + props['size'] = 0 + props['have_catalog'] = os.path.exists(\ + os.path.join(props['mount_path'], 'catalog.xml')) + return props + + def _mount_added_cb(self, volume_monitor, device): + props = self._get_props_from_device(device) + self._devices[device] = props + logging.debug('Device added: %s', props) + if props['have_catalog']: + self.emit('device-changed') + + def _mount_removed_cb(self, volume_monitor, device): + del self._devices[device] + self.emit('device-changed') + + def get_devices(self): + return self._devices diff --git a/devicemanager.pyc b/devicemanager.pyc Binary files differnew file mode 100644 index 0000000..90d9ad0 --- /dev/null +++ b/devicemanager.pyc diff --git a/extListview.py b/extListview.py new file mode 100644 index 0000000..060eddc --- /dev/null +++ b/extListview.py @@ -0,0 +1,705 @@ +# -*- coding: utf-8 -*- +# +# Author: Ingelrest François (Francois.Ingelrest@gmail.com) +# +# 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 Library 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 +# +# ExtListView v1.6 +# +# v1.6: +# * Added a context menu to column headers allowing users to show/hide +# columns +# * Improved sorting a bit +# +# v1.5: +# * Fixed intermittent improper columns resizing +# +# v1.4: +# * Replaced TYPE_INT by TYPE_PYOBJECT as the fifth parameter type of +# extListview-dnd +# (see http://www.daa.com.au/pipermail/pygtk/2007-October/014311.html) +# * Prevent sorting rows when the list is empty +# +# v1.3: +# * Greatly improved speed when sorting a lot of rows +# * Added support for Gtk.CellRendererToggle +# * Improved replaceContent() method +# * Added a call to set_cursor() when removing selected row(s) +# * Added getFirstSelectedRow(), appendRows(), addColumnAttribute(), +# unselectAll() and selectAll() methods +# * Set expand to False when calling pack_start(, True, True, 0) +# +# v1.2: +# * Fixed D'n'D reordering bugs +# * Improved code for testing the state of the keys for mouse clicks +# * Added quite a few new methods (replaceContent, hasMarkAbove, +# hasMarkUnder, __len__, iterSelectedRows, iterAllRows) +# +# v1.1: +# * Added a call to set_cursor() when unselecting all rows upon clicking on +# the empty area +# * Sort indicators are now displayed whenever needed + +import random +import logging + +from gi.repository import Gtk +from gi.repository import GObject +from gi.repository import Gdk + + +# Internal d'n'd (reordering) +DND_REORDERING_ID = 1024 +DND_INTERNAL_TARGET = ('extListview-internal', + Gtk.TargetFlags.SAME_WIDGET, DND_REORDERING_ID) + + +class ExtListViewColumn(Gtk.TreeViewColumn): + """ + TreeViewColumn does not signal right-click events, and we need them + This subclass is equivalent to TreeViewColumn, but it signals these + events + + Most of the code of this class comes from Quod Libet + (http://www.sacredchao.net/quodlibet) + """ + + __gsignals__ = { + 'button-press-event': (GObject.SignalFlags.RUN_LAST, None, + (object,)), + } + + def __init__(self, title=None, cell_renderer=None, **args): + """ Constructor, see Gtk.TreeViewColumn """ + GObject.GObject.__init__(self) + label = Gtk.Label(label=title) + self.set_widget(label) + label.show() + label.__realize = label.connect('realize', self.onRealize) + + def onRealize(self, widget): + widget.disconnect(widget.__realize) + del widget.__realize + button = widget.get_ancestor(Gtk.Button) + if button is not None: + button.connect('button-press-event', self.onButtonPressed) + + def onButtonPressed(self, widget, event): + self.emit('button-press-event', event) + + +class ExtListView(Gtk.TreeView): + + __gsignals__ = { + 'extlistview-modified': (GObject.SignalFlags.RUN_LAST, None, + ()), + + # README: I had to change gdk.Event to object on the arguments + # sent to the callback because with Gdk.Event it didn't work + # 'extlistview-button-pressed': (GObject.SignalFlags.RUN_LAST, None, + # (object, bool)), + } + + def __init__(self, columns, sortable=True, dndTargets=[], useMarkup=False, + canShowHideColumns=True): + """ + If sortable is True, the user can click on headers to sort + the contents of the list + + The d'n'd targets are the targets accepted by the list + (e.g., [('text/uri-list', 0, 0)]) + Note that for the latter, the identifier 1024 must not be used + (internally used for reordering) + + If useMarkup is True, the 'markup' attributes is used instead of + 'text' for CellRendererTexts + """ + GObject.GObject.__init__(self) + + self.selection = self.get_selection() + + # Sorting rows + self.sortLastCol = None # The last column used for sorting + # (needed to switch between ascending/descending) + self.sortAscending = True # Ascending or descending order + self.sortColCriteria = {} # For each column, store the tuple of + # indexes used to sort the rows + + # Default configuration for this list + self.set_rules_hint(True) + self.set_headers_visible(True) + + self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) + + # Create the columns + nbEntries = 0 + dataTypes = [] + for (title, renderers, sortIndexes, expandable, visible) in columns: + if title is None: + nbEntries += len(renderers) + dataTypes += [renderer[1] for renderer in renderers] + else: + column = ExtListViewColumn(title) + column.set_resizable(True) + # column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + column.set_expand(expandable) + column.set_visible(visible) + if canShowHideColumns: + column.connect('button-press-event', + self.onColumnHeaderClicked) + self.append_column(column) + + if sortable: + column.set_clickable(True) + column.connect('clicked', self.__sortRows) + self.sortColCriteria[column] = sortIndexes + + for (renderer, type) in renderers: + nbEntries += 1 + dataTypes.append(type) + column.pack_start(renderer, False) + if isinstance(renderer, Gtk.CellRendererToggle): + column.add_attribute(renderer, 'active', nbEntries - 1) + elif isinstance(renderer, Gtk.CellRendererPixbuf): + column.add_attribute(renderer, 'pixbuf', nbEntries - 1) + elif isinstance(renderer, Gtk.CellRendererText): + if useMarkup: + column.add_attribute(renderer, 'markup', + nbEntries - 1) + else: + column.add_attribute(renderer, 'text', + nbEntries - 1) + + # Mark management + self.markedRow = None + self.markColumn = len(dataTypes) + dataTypes.append(bool) # When there's no other solution, + # this additional entry helps in + # finding the marked row + + # Create the ListStore associated with this tree + self.store = Gtk.ListStore(*dataTypes) + self.set_model(self.store) + + # Drag'n'drop management + self.dndContext = None + self.dndTargets = dndTargets + self.motionEvtId = None + self.dndStartPos = None + self.dndReordering = False + + if len(dndTargets) != 0: + self.enable_model_drag_dest(dndTargets, Gdk.DragAction.DEFAULT) + + # self.connect('drag-begin', self.onDragBegin) + # self.connect('drag-motion', self.onDragMotion) + + # README: this function is disconnected because it emit twice + # 'selection-changed' + # self.connect('button-press-event', self.onButtonPressed) + + # self.connect('drag-data-received', self.onDragDataReceived) + # self.connect('button-release-event', self.onButtonReleased) + + # Show the list + self.show() + + # --== Miscellaneous ==-- + + def __getIterOnSelectedRows(self): + """ Return a list of iterators pointing to the selected rows """ + return [self.store.get_iter(path) \ + for path in self.selection.get_selected_rows()[1]] + + def addColumnAttribute(self, colIndex, renderer, attribute, value): + """ Add a new attribute to the given column """ + self.get_column(colIndex).add_attribute(renderer, attribute, value) + + # --== Mark management ==-- + + def hasMark(self): + """ True if a mark has been set """ + return self.markedRow is not None + + def hasMarkAbove(self, index): + """ True if a mark is set and is above the given index """ + return self.markedRow is not None and self.markedRow > index + + def hasMarkUnder(self, index): + """ True if a mark is set and is undex the given index """ + return self.markedRow is not None and self.markedRow < index + + def clearMark(self): + """ Remove the mark """ + if self.markedRow is not None: + self.setItem(self.markedRow, self.markColumn, False) + self.markedRow = None + + def getMark(self): + """ Return the index of the marked row """ + return self.markedRow + + def setMark(self, rowIndex): + """ Put the mark on the given row, it will move with the + row itself (e.g., D'n'D) """ + self.clearMark() + self.markedRow = rowIndex + self.setItem(rowIndex, self.markColumn, True) + + def __findMark(self): + """ Linear search for the marked row -- + To be used only when there's no other solution """ + iter = self.store.get_iter_first() + + while iter is not None: + if self.store.get_value(iter, self.markColumn) == True: + self.markedRow = self.store.get_path(iter)[0] + break + iter = self.store.iter_next(iter) + + # --== Sorting content ==-- + + def __resetSorting(self): + """ Reset sorting such that the next column click + will result in an ascending sorting """ + if self.sortLastCol is not None: + self.sortLastCol.set_sort_indicator(False) + self.sortLastCol = None + + def __cmpRows(self, row1, row2, criteria, ascending): + """ Compare two rows based on the given criteria, the latter + being a tuple of the indexes to use for the comparison """ + # Sorting on the first criterion may be done either ascending + # or descending + criterion = criteria[0] + result = cmp(row1[criterion], row2[criterion]) + + if result != 0: + if ascending: + return result + else: + return -result + + # For subsequent criteria, the order is always ascending + for criterion in criteria[1:]: + result = cmp(row1[criterion], row2[criterion]) + if result != 0: + return result + return 0 + + def __sortRows(self, column): + """ Sort the rows """ + if len(self.store) == 0: + return + + if self.sortLastCol is not None: + self.sortLastCol.set_sort_indicator(False) + + # Find how sorting must be performed + if self.sortLastCol == column: + self.sortAscending = not self.sortAscending + else: + self.sortLastCol = column + self.sortAscending = True + + # Dump the rows, sort them, and reorder the list + rows = [tuple(r) + (i,) for i, r in enumerate(self.store)] + criteria = self.sortColCriteria[column] + rows.sort(lambda r1, r2: \ + self.__cmpRows(r1, r2, criteria, self.sortAscending)) + # FIXME: AttributeError: 'ListStore' object has no attribute 'reorder' + # Bug filled upstream: + # - https://bugzilla.gnome.org/show_bug.cgi?id=677941 + # self.store.reorder([r[-1] for r in rows]) + + # Move the mark if needed + if self.markedRow is not None: + self.__findMark() + + column.set_sort_indicator(True) + if self.sortAscending: + column.set_sort_order(Gtk.SortType.ASCENDING) + else: + column.set_sort_order(Gtk.SortType.DESCENDING) + + self.emit('extlistview-modified') + + # --== Selection ==-- + + def unselectAll(self): + """ Unselect all rows """ + self.selection.unselect_all() + + def selectAll(self): + """ Select all rows """ + self.selection.select_all() + + def getSelectedRowsCount(self): + """ Return how many rows are currently selected """ + return self.selection.count_selected_rows() + + def getSelectedRows(self): + """ Return all selected row(s) """ + return [tuple(self.store[path])[:-1] \ + for path in self.selection.get_selected_rows()[1]] + + def getFirstSelectedRow(self): + """ Return only the first selected row """ + # TODO: check if this fail on gtk2 version after click on the ListView + return tuple(self.store[self.selection.get_selected_rows()[1][0]])[:-1] + + def getFirstSelectedRowIndex(self): + """ Return the index of the first selected row """ + return self.selection.get_selected_rows()[1][0][0] + + def iterSelectedRows(self): + """ Iterate on all selected row(s) """ + for path in self.selection.get_selected_rows()[1]: + yield tuple(self.store[path])[:-1] + + # --== Retrieving content / Iterating on content ==-- + + def __len__(self): + """ Return how many rows are stored in the list """ + return len(self.store) + + def getCount(self): + """ Return how many rows are stored in the list """ + return len(self.store) + + def getRow(self, rowIndex): + """ Return the given row """ + return tuple(self.store[rowIndex])[:-1] + + def getAllRows(self): + """ Return all rows """ + return [tuple(row)[:-1] for row in self.store] + + def iterAllRows(self): + """ Iterate on all rows """ + for row in self.store: + yield tuple(row)[:-1] + + def getItem(self, rowIndex, colIndex): + """ Return the value of the given item """ + return self.store.get_value(self.store.get_iter(rowIndex), colIndex) + + # --== Adding/removing/modifying content ==-- + + def clear(self): + """ Remove all rows from the list """ + self.__resetSorting() + self.clearMark() + self.store.clear() + # This fixes the problem of columns sometimes not resizing correctly + self.resize_children() + + def setItem(self, rowIndex, colIndex, value): + """ Change the value of the given item """ + # Check if changing that item may change the sorting: if so, + # reset sorting + if self.sortLastCol is not None and colIndex in \ + self.sortColCriteria[self.sortLastCol]: + self.__resetSorting() + self.store.set_value(self.store.get_iter(rowIndex), colIndex, value) + + def removeSelectedRows(self): + """ Remove the selected row(s) """ + self.freeze_child_notify() + for iter in self.__getIterOnSelectedRows(): + # Move the mark if needed + if self.markedRow is not None: + currentPath = self.store.get_path(iter)[0] + if currentPath < self.markedRow: + self.markedRow -= 1 + elif currentPath == self.markedRow: + self.markedRow = None + # Remove the current row + if self.store.remove(iter): + self.set_cursor(self.store.get_path(iter)) + elif len(self.store) != 0: + self.set_cursor(len(self.store) - 1) + self.thaw_child_notify() + if len(self.store) == 0: + self.set_cursor(0) + self.__resetSorting() + # This fixes the problem of columns sometimes not resizing correctly + self.resize_children() + self.emit('extlistview-modified') + + def cropSelectedRows(self): + """ Remove all rows but the selected ones """ + pathsList = self.selection.get_selected_rows()[1] + self.freeze_child_notify() + self.selection.select_all() + for path in pathsList: + self.selection.unselect_path(path) + self.removeSelectedRows() + self.selection.select_all() + self.thaw_child_notify() + + def insertRows(self, rows, position=None): + """ Insert or append (if position is None) some rows to the list """ + if len(rows) == 0: + return + + # Insert the additional column used for the mark management + if type(rows[0]) is tuple: + rows[:] = [row + (False,) for row in rows] + else: + rows[:] = [row + [False] for row in rows] + + # Move the mark if needed + if self.markedRow is not None and position is not None \ + and position <= self.markedRow: + self.markedRow += len(rows) + + # Insert rows + self.freeze_child_notify() + if position is None: + for row in rows: + self.store.append(row) + else: + for row in rows: + self.store.insert(position, row) + position += 1 + self.thaw_child_notify() + self.__resetSorting() + self.emit('extlistview-modified') + + def appendRows(self, rows): + """ Helper function, equivalent to insertRows(rows, None) """ + self.insertRows(rows, None) + + def replaceContent(self, rows): + """ Replace the content of the list with the given rows """ + self.freeze_child_notify() + self.set_model(None) + self.clear() + self.appendRows(rows) + self.set_model(self.store) + self.thaw_child_notify() + + def shuffle(self): + """ Shuffle the content of the list """ + order = range(len(self.store)) + random.shuffle(order) + self.store.reorder(order) + + # Move the mark if needed + if self.markedRow is not None: + self.__findMark() + + self.__resetSorting() + self.emit('extlistview-modified') + + # --== D'n'D management ==-- + + def enableDNDReordering(self): + """ Enable the use of Drag'n'Drop to reorder the list """ + self.dndReordering = True + self.dndTargets.append(DND_INTERNAL_TARGET) + self.enable_model_drag_dest(self.dndTargets, Gdk.DragAction.DEFAULT) + + def __isDropAfter(self, pos): + """ Helper function, True if pos is Gtk.TreeViewDropPosition.AFTER or + Gtk.TreeViewDropPosition.INTO_OR_AFTER """ + return pos == Gtk.TreeViewDropPosition.AFTER or \ + pos == Gtk.TreeViewDropPosition.INTO_OR_AFTER + + def __moveSelectedRows(self, x, y): + """ Internal function used for drag'n'drop """ + iterList = self.__getIterOnSelectedRows() + dropInfo = self.get_dest_row_at_pos(int(x), int(y)) + + if dropInfo is None: + pos, path = (Gtk.TreeViewDropPosition.INTO_OR_AFTER, + len(self.store) - 1) + else: + pos, path = (dropInfo[1], dropInfo[0][0]) + if self.__isDropAfter(pos) and path < len(self.store) - 1: + pos = Gtk.TreeViewDropPosition.INTO_OR_BEFORE + path += 1 + + self.freeze_child_notify() + for srcIter in iterList: + srcPath = self.store.get_path(srcIter)[0] + + if self.__isDropAfter(pos): + dstIter = self.store.insert_after(self.store.get_iter(path), + self.store[srcIter]) + else: + dstIter = self.store.insert_before(self.store.get_iter(path), + self.store[srcIter]) + if path == srcPath: + path += 1 + + self.store.remove(srcIter) + dstPath = self.store.get_path(dstIter)[0] + + if srcPath > dstPath: + path += 1 + + if self.markedRow is not None: + if srcPath == self.markedRow: + self.markedRow = dstPath + elif srcPath < self.markedRow and dstPath >= self.markedRow: + self.markedRow -= 1 + elif srcPath > self.markedRow and dstPath <= self.markedRow: + self.markedRow += 1 + self.thaw_child_notify() + self.__resetSorting() + self.emit('extlistview-modified') + + # --== GTK Handlers ==-- + + def onButtonPressed(self, tree, event): + """ A mouse button has been pressed """ + retVal = False + pathInfo = self.get_path_at_pos(int(event.x), int(event.y)) + + if pathInfo is None: + path = None + else: + path = pathInfo[0] + + if event.button == 1 or event.button == 3: + if path is None: + # README: this emit the signal: selection-changed and + # there is nothing selected so we get an IndexError + self.selection.unselect_all() + tree.set_cursor(len(self.store)) + else: + if self.dndReordering and self.motionEvtId is None \ + and event.button == 1: + self.dndStartPos = (int(event.x), int(event.y)) + self.motionEvtId = Gtk.TreeView.connect(self, \ + 'motion-notify-event', self.onMouseMotion) + + stateClear = not (event.get_state() & \ + (Gdk.ModifierType.SHIFT_MASK | + Gdk.ModifierType.CONTROL_MASK)) + + if stateClear and not self.selection.path_is_selected(path): + self.selection.unselect_all() + self.selection.select_path(path) + else: + retVal = (stateClear and self.getSelectedRowsCount() > 1 \ + and self.selection.path_is_selected(path)) + + # self.emit('extlistview-button-pressed', event, path) + + return retVal + + def onButtonReleased(self, tree, event): + """ A mouse button has been released """ + if self.motionEvtId is not None: + self.disconnect(self.motionEvtId) + self.dndContext = None + self.motionEvtId = None + + if len(self.dndTargets) != 0: + self.enable_model_drag_dest(self.dndTargets, + Gdk.DragAction.DEFAULT) + + stateClear = not (event.get_state() & \ + (Gdk.ModifierType.SHIFT_MASK | + Gdk.ModifierType.CONTROL_MASK)) + + if stateClear and event.get_state() & Gdk.ModifierType.BUTTON1_MASK \ + and self.getSelectedRowsCount() > 1: + pathInfo = self.get_path_at_pos(int(event.x), int(event.y)) + if pathInfo is not None: + self.selection.unselect_all() + self.selection.select_path(pathInfo[0][0]) + + def onMouseMotion(self, tree, event): + """ The mouse has been moved """ + if self.dndContext is None and \ + self.drag_check_threshold(self.dndStartPos[0], self.dndStartPos[1], + int(event.x), int(event.y)): + self.dndContext = self.drag_begin([DND_INTERNAL_TARGET], + Gdk.DragAction.COPY, 1, event) + + def onDragBegin(self, tree, context): + """ A drag'n'drop operation has begun """ + if self.getSelectedRowsCount() == 1: + context.set_icon_stock(Gtk.STOCK_DND, 0, 0) + else: + context.set_icon_stock(Gtk.STOCK_DND_MULTIPLE, 0, 0) + + def onDragDataReceived(self, tree, context, x, y, selection, dndId, time): + """ Some data has been dropped into the list """ + if dndId == DND_REORDERING_ID: + self.__moveSelectedRows(x, y) + else: + self.emit('extlistview-dnd', context, int(x), int(y), + selection, dndId, time) + + def onDragMotion(self, tree, context, x, y, time): + """ Prevent rows from being dragged *into* other rows + (this is a list, not a tree) """ + drop = self.get_dest_row_at_pos(int(x), int(y)) + + if drop is not None and \ + (drop[1] == Gtk.TreeViewDropPosition.INTO_OR_AFTER or \ + drop[1] == Gtk.TreeViewDropPosition.INTO_OR_BEFORE): + self.enable_model_drag_dest([('invalid-position', 0, -1)], + Gdk.DragAction.DEFAULT) + else: + self.enable_model_drag_dest(self.dndTargets, + Gdk.DragAction.DEFAULT) + + def onColumnHeaderClicked(self, column, event): + """ A column header has been clicked """ + + if event.button == 3: + # Create a menu with a CheckMenuItem per column + menu = Gtk.Menu() + + # README: it seems like we should use a Palette here + # from sugar3.graphics.palette import Palette + # menu = Palette('Humitos', text_maxlen=50) + + nbVisibleItems = 0 + lastVisibleItem = None + for column in self.get_columns(): + item = Gtk.CheckMenuItem(column.get_title()) + item.set_active(column.get_visible()) + item.connect('toggled', self.onShowHideColumn, column) + item.show() + menu.append(item) + + # Count how many columns are visible + if item.get_active(): + nbVisibleItems += 1 + lastVisibleItem = item + + # Don't allow the user to hide the only visible column left + if nbVisibleItems == 1: + lastVisibleItem.set_sensitive(False) + + # README: a new argument is needed. Although this is not working + # http://developer.gnome.org/gtk3/3.5/GtkMenu.html#gtk-menu-popup + menu.popup(None, None, None, None, event.button, event.get_time()) + + # FIXME: for some reason this menu.popup call is not + # showing the popup + + def onShowHideColumn(self, menuItem, column): + """ Switch the visibility of the given column """ + column.set_visible(not column.get_visible()) + self.emit('extlistview-column-visibility-changed', \ + column.get_title(), column.get_visible()) diff --git a/extListview.pyc b/extListview.pyc Binary files differnew file mode 100644 index 0000000..425e6aa --- /dev/null +++ b/extListview.pyc diff --git a/feedparser.py b/feedparser.py new file mode 100644 index 0000000..b9144a9 --- /dev/null +++ b/feedparser.py @@ -0,0 +1,3909 @@ +#!/usr/bin/env python +"""Universal feed parser + +Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds + +Visit http://feedparser.org/ for the latest version +Visit http://feedparser.org/docs/ for the latest documentation + +Required: Python 2.4 or later +Recommended: CJKCodecs and iconv_codec <http://cjkpython.i18n.org/> +""" + +__version__ = "5.0.1" +__license__ = """Copyright (c) 2002-2008, Mark Pilgrim, All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE.""" +__author__ = "Mark Pilgrim <http://diveintomark.org/>" +__contributors__ = ["Jason Diamond <http://injektilo.org/>", + "John Beimler <http://john.beimler.org/>", + "Fazal Majid <http://www.majid.info/mylos/weblog/>", + "Aaron Swartz <http://aaronsw.com/>", + "Kevin Marks <http://epeus.blogspot.com/>", + "Sam Ruby <http://intertwingly.net/>", + "Ade Oshineye <http://blog.oshineye.com/>", + "Martin Pool <http://sourcefrog.net/>", + "Kurt McKee <http://kurtmckee.org/>"] +_debug = 0 + +# HTTP "User-Agent" header to send to servers when downloading feeds. +# If you are embedding feedparser in a larger application, you should +# change this to your application name and URL. +USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ + +# HTTP "Accept" header to send to servers when downloading feeds. If you don't +# want to send an Accept header, set this to None. +ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" + +# List of preferred XML parsers, by SAX driver name. These will be tried first, +# but if they're not installed, Python will keep searching through its own list +# of pre-installed parsers until it finds one that supports everything we need. +PREFERRED_XML_PARSERS = ["drv_libxml2"] + +# If you want feedparser to automatically run HTML markup through HTML Tidy, set +# this to 1. Requires mxTidy <http://www.egenix.com/files/python/mxTidy.html> +# or utidylib <http://utidylib.berlios.de/>. +TIDY_MARKUP = 0 + +# List of Python interfaces for HTML Tidy, in order of preference. Only useful +# if TIDY_MARKUP = 1 +PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] + +# If you want feedparser to automatically resolve all relative URIs, set this +# to 1. +RESOLVE_RELATIVE_URIS = 1 + +# If you want feedparser to automatically sanitize all potentially unsafe +# HTML content, set this to 1. +SANITIZE_HTML = 1 + +# ---------- Python 3 modules (make it work if possible) ---------- +try: + import rfc822 +except ImportError: + from email import _parseaddr as rfc822 + +try: + # Python 3.1 introduces bytes.maketrans and simultaneously + # deprecates string.maketrans; use bytes.maketrans if possible + _maketrans = bytes.maketrans +except (NameError, AttributeError): + import string + _maketrans = string.maketrans + +# base64 support for Atom feeds that contain embedded binary data +try: + import base64, binascii + # Python 3.1 deprecates decodestring in favor of decodebytes + _base64decode = getattr(base64, 'decodebytes', base64.decodestring) +except: + base64 = binascii = None + +def _s2bytes(s): + # Convert a UTF-8 str to bytes if the interpreter is Python 3 + try: + return bytes(s, 'utf8') + except (NameError, TypeError): + # In Python 2.5 and below, bytes doesn't exist (NameError) + # In Python 2.6 and above, bytes and str are the same (TypeError) + return s + +def _l2bytes(l): + # Convert a list of ints to bytes if the interpreter is Python 3 + try: + if bytes is not str: + # In Python 2.6 and above, this call won't raise an exception + # but it will return bytes([65]) as '[65]' instead of 'A' + return bytes(l) + raise NameError + except NameError: + return ''.join(map(chr, l)) + +# If you want feedparser to allow all URL schemes, set this to () +# List culled from Python's urlparse documentation at: +# http://docs.python.org/library/urlparse.html +# as well as from "URI scheme" at Wikipedia: +# https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme +# Many more will likely need to be added! +ACCEPTABLE_URI_SCHEMES = ( + 'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'mailto', + 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu', 'sftp', + 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet', 'wais', + # Additional common-but-unofficial schemes + 'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs', + 'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg', +) +#ACCEPTABLE_URI_SCHEMES = () + +# ---------- required modules (should come with any Python distribution) ---------- +import sgmllib, re, sys, copy, urlparse, time, types, cgi, urllib, urllib2, datetime +try: + from io import BytesIO as _StringIO +except ImportError: + try: + from cStringIO import StringIO as _StringIO + except: + from StringIO import StringIO as _StringIO + +# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- + +# gzip is included with most Python distributions, but may not be available if you compiled your own +try: + import gzip +except: + gzip = None +try: + import zlib +except: + zlib = None + +# If a real XML parser is available, feedparser will attempt to use it. feedparser has +# been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the +# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some +# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. +try: + import xml.sax + xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers + from xml.sax.saxutils import escape as _xmlescape + _XML_AVAILABLE = 1 +except: + _XML_AVAILABLE = 0 + def _xmlescape(data,entities={}): + data = data.replace('&', '&') + data = data.replace('>', '>') + data = data.replace('<', '<') + for char, entity in entities: + data = data.replace(char, entity) + return data + +# cjkcodecs and iconv_codec provide support for more character encodings. +# Both are available from http://cjkpython.i18n.org/ +try: + import cjkcodecs.aliases +except: + pass +try: + import iconv_codec +except: + pass + +# chardet library auto-detects character encodings +# Download from http://chardet.feedparser.org/ +try: + import chardet + if _debug: + import chardet.constants + chardet.constants._debug = 1 +except: + chardet = None + +# reversable htmlentitydefs mappings for Python 2.2 +try: + from htmlentitydefs import name2codepoint, codepoint2name +except: + import htmlentitydefs + name2codepoint={} + codepoint2name={} + for (name,codepoint) in htmlentitydefs.entitydefs.iteritems(): + if codepoint.startswith('&#'): codepoint=unichr(int(codepoint[2:-1])) + name2codepoint[name]=ord(codepoint) + codepoint2name[ord(codepoint)]=name + +# BeautifulSoup parser used for parsing microformats from embedded HTML content +# http://www.crummy.com/software/BeautifulSoup/ +# feedparser is tested with BeautifulSoup 3.0.x, but it might work with the +# older 2.x series. If it doesn't, and you can figure out why, I'll accept a +# patch and modify the compatibility statement accordingly. +try: + import BeautifulSoup +except: + BeautifulSoup = None + +# ---------- don't touch these ---------- +class ThingsNobodyCaresAboutButMe(Exception): pass +class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass +class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass +class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass +class UndeclaredNamespace(Exception): pass + +sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') +sgmllib.special = re.compile('<!') +sgmllib.charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);') + +if sgmllib.endbracket.search(' <').start(0): + class EndBracketRegEx: + def __init__(self): + # Overriding the built-in sgmllib.endbracket regex allows the + # parser to find angle brackets embedded in element attributes. + self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''') + def search(self,string,index=0): + match = self.endbracket.match(string,index) + if match is not None: + # Returning a new object in the calling thread's context + # resolves a thread-safety. + return EndBracketMatch(match) + return None + class EndBracketMatch: + def __init__(self, match): + self.match = match + def start(self, n): + return self.match.end(n) + sgmllib.endbracket = EndBracketRegEx() + +SUPPORTED_VERSIONS = {'': 'unknown', + 'rss090': 'RSS 0.90', + 'rss091n': 'RSS 0.91 (Netscape)', + 'rss091u': 'RSS 0.91 (Userland)', + 'rss092': 'RSS 0.92', + 'rss093': 'RSS 0.93', + 'rss094': 'RSS 0.94', + 'rss20': 'RSS 2.0', + 'rss10': 'RSS 1.0', + 'rss': 'RSS (unknown version)', + 'atom01': 'Atom 0.1', + 'atom02': 'Atom 0.2', + 'atom03': 'Atom 0.3', + 'atom10': 'Atom 1.0', + 'atom': 'Atom (unknown version)', + 'cdf': 'CDF', + 'hotrss': 'Hot RSS' + } + +try: + UserDict = dict +except NameError: + # Python 2.1 does not have dict + from UserDict import UserDict + def dict(aList): + rc = {} + for k, v in aList: + rc[k] = v + return rc + +class FeedParserDict(UserDict): + keymap = {'channel': 'feed', + 'items': 'entries', + 'guid': 'id', + 'date': 'updated', + 'date_parsed': 'updated_parsed', + 'description': ['summary', 'subtitle'], + 'url': ['href'], + 'modified': 'updated', + 'modified_parsed': 'updated_parsed', + 'issued': 'published', + 'issued_parsed': 'published_parsed', + 'copyright': 'rights', + 'copyright_detail': 'rights_detail', + 'tagline': 'subtitle', + 'tagline_detail': 'subtitle_detail'} + def __getitem__(self, key): + if key == 'category': + return UserDict.__getitem__(self, 'tags')[0]['term'] + if key == 'enclosures': + norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel']) + return [norel(link) for link in UserDict.__getitem__(self, 'links') if link['rel']=='enclosure'] + if key == 'license': + for link in UserDict.__getitem__(self, 'links'): + if link['rel']=='license' and link.has_key('href'): + return link['href'] + if key == 'categories': + return [(tag['scheme'], tag['term']) for tag in UserDict.__getitem__(self, 'tags')] + realkey = self.keymap.get(key, key) + if type(realkey) == types.ListType: + for k in realkey: + if UserDict.__contains__(self, k): + return UserDict.__getitem__(self, k) + if UserDict.__contains__(self, key): + return UserDict.__getitem__(self, key) + return UserDict.__getitem__(self, realkey) + + def __setitem__(self, key, value): + for k in self.keymap.keys(): + if key == k: + key = self.keymap[k] + if type(key) == types.ListType: + key = key[0] + return UserDict.__setitem__(self, key, value) + + def get(self, key, default=None): + if self.has_key(key): + return self[key] + else: + return default + + def setdefault(self, key, value): + if not self.has_key(key): + self[key] = value + return self[key] + + def has_key(self, key): + try: + return hasattr(self, key) or UserDict.__contains__(self, key) + except AttributeError: + return False + # This alias prevents the 2to3 tool from changing the semantics of the + # __contains__ function below and exhausting the maximum recursion depth + __has_key = has_key + + def __getattr__(self, key): + try: + return self.__dict__[key] + except KeyError: + pass + try: + assert not key.startswith('_') + return self.__getitem__(key) + except: + raise AttributeError, "object has no attribute '%s'" % key + + def __setattr__(self, key, value): + if key.startswith('_') or key == 'data': + self.__dict__[key] = value + else: + return self.__setitem__(key, value) + + def __contains__(self, key): + return self.__has_key(key) + +def zopeCompatibilityHack(): + global FeedParserDict + del FeedParserDict + def FeedParserDict(aDict=None): + rc = {} + if aDict: + rc.update(aDict) + return rc + +_ebcdic_to_ascii_map = None +def _ebcdic_to_ascii(s): + global _ebcdic_to_ascii_map + if not _ebcdic_to_ascii_map: + emap = ( + 0,1,2,3,156,9,134,127,151,141,142,11,12,13,14,15, + 16,17,18,19,157,133,8,135,24,25,146,143,28,29,30,31, + 128,129,130,131,132,10,23,27,136,137,138,139,140,5,6,7, + 144,145,22,147,148,149,150,4,152,153,154,155,20,21,158,26, + 32,160,161,162,163,164,165,166,167,168,91,46,60,40,43,33, + 38,169,170,171,172,173,174,175,176,177,93,36,42,41,59,94, + 45,47,178,179,180,181,182,183,184,185,124,44,37,95,62,63, + 186,187,188,189,190,191,192,193,194,96,58,35,64,39,61,34, + 195,97,98,99,100,101,102,103,104,105,196,197,198,199,200,201, + 202,106,107,108,109,110,111,112,113,114,203,204,205,206,207,208, + 209,126,115,116,117,118,119,120,121,122,210,211,212,213,214,215, + 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231, + 123,65,66,67,68,69,70,71,72,73,232,233,234,235,236,237, + 125,74,75,76,77,78,79,80,81,82,238,239,240,241,242,243, + 92,159,83,84,85,86,87,88,89,90,244,245,246,247,248,249, + 48,49,50,51,52,53,54,55,56,57,250,251,252,253,254,255 + ) + _ebcdic_to_ascii_map = _maketrans( \ + _l2bytes(range(256)), _l2bytes(emap)) + return s.translate(_ebcdic_to_ascii_map) + +_cp1252 = { + unichr(128): unichr(8364), # euro sign + unichr(130): unichr(8218), # single low-9 quotation mark + unichr(131): unichr( 402), # latin small letter f with hook + unichr(132): unichr(8222), # double low-9 quotation mark + unichr(133): unichr(8230), # horizontal ellipsis + unichr(134): unichr(8224), # dagger + unichr(135): unichr(8225), # double dagger + unichr(136): unichr( 710), # modifier letter circumflex accent + unichr(137): unichr(8240), # per mille sign + unichr(138): unichr( 352), # latin capital letter s with caron + unichr(139): unichr(8249), # single left-pointing angle quotation mark + unichr(140): unichr( 338), # latin capital ligature oe + unichr(142): unichr( 381), # latin capital letter z with caron + unichr(145): unichr(8216), # left single quotation mark + unichr(146): unichr(8217), # right single quotation mark + unichr(147): unichr(8220), # left double quotation mark + unichr(148): unichr(8221), # right double quotation mark + unichr(149): unichr(8226), # bullet + unichr(150): unichr(8211), # en dash + unichr(151): unichr(8212), # em dash + unichr(152): unichr( 732), # small tilde + unichr(153): unichr(8482), # trade mark sign + unichr(154): unichr( 353), # latin small letter s with caron + unichr(155): unichr(8250), # single right-pointing angle quotation mark + unichr(156): unichr( 339), # latin small ligature oe + unichr(158): unichr( 382), # latin small letter z with caron + unichr(159): unichr( 376)} # latin capital letter y with diaeresis + +_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)') +def _urljoin(base, uri): + uri = _urifixer.sub(r'\1\3', uri) + try: + return urlparse.urljoin(base, uri) + except: + uri = urlparse.urlunparse([urllib.quote(part) for part in urlparse.urlparse(uri)]) + return urlparse.urljoin(base, uri) + +class _FeedParserMixin: + namespaces = {'': '', + 'http://backend.userland.com/rss': '', + 'http://blogs.law.harvard.edu/tech/rss': '', + 'http://purl.org/rss/1.0/': '', + 'http://my.netscape.com/rdf/simple/0.9/': '', + 'http://example.com/newformat#': '', + 'http://example.com/necho': '', + 'http://purl.org/echo/': '', + 'uri/of/echo/namespace#': '', + 'http://purl.org/pie/': '', + 'http://purl.org/atom/ns#': '', + 'http://www.w3.org/2005/Atom': '', + 'http://purl.org/rss/1.0/modules/rss091#': '', + + 'http://webns.net/mvcb/': 'admin', + 'http://purl.org/rss/1.0/modules/aggregation/': 'ag', + 'http://purl.org/rss/1.0/modules/annotate/': 'annotate', + 'http://media.tangent.org/rss/1.0/': 'audio', + 'http://backend.userland.com/blogChannelModule': 'blogChannel', + 'http://web.resource.org/cc/': 'cc', + 'http://backend.userland.com/creativeCommonsRssModule': 'creativeCommons', + 'http://purl.org/rss/1.0/modules/company': 'co', + 'http://purl.org/rss/1.0/modules/content/': 'content', + 'http://my.theinfo.org/changed/1.0/rss/': 'cp', + 'http://purl.org/dc/elements/1.1/': 'dc', + 'http://purl.org/dc/terms/': 'dcterms', + 'http://purl.org/rss/1.0/modules/email/': 'email', + 'http://purl.org/rss/1.0/modules/event/': 'ev', + 'http://rssnamespace.org/feedburner/ext/1.0': 'feedburner', + 'http://freshmeat.net/rss/fm/': 'fm', + 'http://xmlns.com/foaf/0.1/': 'foaf', + 'http://www.w3.org/2003/01/geo/wgs84_pos#': 'geo', + 'http://postneo.com/icbm/': 'icbm', + 'http://purl.org/rss/1.0/modules/image/': 'image', + 'http://www.itunes.com/DTDs/PodCast-1.0.dtd': 'itunes', + 'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes', + 'http://purl.org/rss/1.0/modules/link/': 'l', + 'http://search.yahoo.com/mrss': 'media', + #Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace + 'http://search.yahoo.com/mrss/': 'media', + 'http://madskills.com/public/xml/rss/module/pingback/': 'pingback', + 'http://prismstandard.org/namespaces/1.2/basic/': 'prism', + 'http://www.w3.org/1999/02/22-rdf-syntax-ns#': 'rdf', + 'http://www.w3.org/2000/01/rdf-schema#': 'rdfs', + 'http://purl.org/rss/1.0/modules/reference/': 'ref', + 'http://purl.org/rss/1.0/modules/richequiv/': 'reqv', + 'http://purl.org/rss/1.0/modules/search/': 'search', + 'http://purl.org/rss/1.0/modules/slash/': 'slash', + 'http://schemas.xmlsoap.org/soap/envelope/': 'soap', + 'http://purl.org/rss/1.0/modules/servicestatus/': 'ss', + 'http://hacks.benhammersley.com/rss/streaming/': 'str', + 'http://purl.org/rss/1.0/modules/subscription/': 'sub', + 'http://purl.org/rss/1.0/modules/syndication/': 'sy', + 'http://schemas.pocketsoap.com/rss/myDescModule/': 'szf', + 'http://purl.org/rss/1.0/modules/taxonomy/': 'taxo', + 'http://purl.org/rss/1.0/modules/threading/': 'thr', + 'http://purl.org/rss/1.0/modules/textinput/': 'ti', + 'http://madskills.com/public/xml/rss/module/trackback/':'trackback', + 'http://wellformedweb.org/commentAPI/': 'wfw', + 'http://purl.org/rss/1.0/modules/wiki/': 'wiki', + 'http://www.w3.org/1999/xhtml': 'xhtml', + 'http://www.w3.org/1999/xlink': 'xlink', + 'http://www.w3.org/XML/1998/namespace': 'xml' +} + _matchnamespaces = {} + + can_be_relative_uri = ['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo'] + can_contain_relative_uris = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'] + can_contain_dangerous_markup = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'] + html_types = ['text/html', 'application/xhtml+xml'] + + def __init__(self, baseuri=None, baselang=None, encoding='utf-8'): + if _debug: sys.stderr.write('initializing FeedParser\n') + if not self._matchnamespaces: + for k, v in self.namespaces.items(): + self._matchnamespaces[k.lower()] = v + self.feeddata = FeedParserDict() # feed-level data + self.encoding = encoding # character encoding + self.entries = [] # list of entry-level data + self.version = '' # feed type/version, see SUPPORTED_VERSIONS + self.namespacesInUse = {} # dictionary of namespaces defined by the feed + + # the following are used internally to track state; + # this is really out of control and should be refactored + self.infeed = 0 + self.inentry = 0 + self.incontent = 0 + self.intextinput = 0 + self.inimage = 0 + self.inauthor = 0 + self.incontributor = 0 + self.inpublisher = 0 + self.insource = 0 + self.sourcedata = FeedParserDict() + self.contentparams = FeedParserDict() + self._summaryKey = None + self.namespacemap = {} + self.elementstack = [] + self.basestack = [] + self.langstack = [] + self.baseuri = baseuri or '' + self.lang = baselang or None + self.svgOK = 0 + self.hasTitle = 0 + if baselang: + self.feeddata['language'] = baselang.replace('_','-') + + def unknown_starttag(self, tag, attrs): + if _debug: sys.stderr.write('start %s with %s\n' % (tag, attrs)) + # normalize attrs + attrs = [(k.lower(), v) for k, v in attrs] + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + # the sgml parser doesn't handle entities in attributes, but + # strict xml parsers do -- account for this difference + if isinstance(self, _LooseFeedParser): + attrs = [(k, v.replace('&', '&')) for k, v in attrs] + + # track xml:base and xml:lang + attrsD = dict(attrs) + baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri + if type(baseuri) != type(u''): + try: + baseuri = unicode(baseuri, self.encoding) + except: + baseuri = unicode(baseuri, 'iso-8859-1') + # ensure that self.baseuri is always an absolute URI that + # uses a whitelisted URI scheme (e.g. not `javscript:`) + if self.baseuri: + self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri + else: + self.baseuri = _urljoin(self.baseuri, baseuri) + lang = attrsD.get('xml:lang', attrsD.get('lang')) + if lang == '': + # xml:lang could be explicitly set to '', we need to capture that + lang = None + elif lang is None: + # if no xml:lang is specified, use parent lang + lang = self.lang + if lang: + if tag in ('feed', 'rss', 'rdf:RDF'): + self.feeddata['language'] = lang.replace('_','-') + self.lang = lang + self.basestack.append(self.baseuri) + self.langstack.append(lang) + + # track namespaces + for prefix, uri in attrs: + if prefix.startswith('xmlns:'): + self.trackNamespace(prefix[6:], uri) + elif prefix == 'xmlns': + self.trackNamespace(None, uri) + + # track inline content + if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + if tag in ['xhtml:div', 'div']: return # typepad does this 10/2007 + # element declared itself as escaped markup, but it isn't really + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + if tag.find(':') <> -1: + prefix, tag = tag.split(':', 1) + namespace = self.namespacesInUse.get(prefix, '') + if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML': + attrs.append(('xmlns',namespace)) + if tag=='svg' and namespace=='http://www.w3.org/2000/svg': + attrs.append(('xmlns',namespace)) + if tag == 'svg': self.svgOK += 1 + return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0) + + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # special hack for better tracking of empty textinput/image elements in illformed feeds + if (not prefix) and tag not in ('title', 'link', 'description', 'name'): + self.intextinput = 0 + if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): + self.inimage = 0 + + # call special handler (if defined) or default handler + methodname = '_start_' + prefix + suffix + try: + method = getattr(self, methodname) + return method(attrsD) + except AttributeError: + # Since there's no handler or something has gone wrong we explicitly add the element and its attributes + unknown_tag = prefix + suffix + if len(attrsD) == 0: + # No attributes so merge it into the encosing dictionary + return self.push(unknown_tag, 1) + else: + # Has attributes so create it in its own dictionary + context = self._getContext() + context[unknown_tag] = attrsD + + def unknown_endtag(self, tag): + if _debug: sys.stderr.write('end %s\n' % tag) + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + if suffix == 'svg' and self.svgOK: self.svgOK -= 1 + + # call special handler (if defined) or default handler + methodname = '_end_' + prefix + suffix + try: + if self.svgOK: raise AttributeError() + method = getattr(self, methodname) + method() + except AttributeError: + self.pop(prefix + suffix) + + # track inline content + if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + # element declared itself as escaped markup, but it isn't really + if tag in ['xhtml:div', 'div']: return # typepad does this 10/2007 + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + tag = tag.split(':')[-1] + self.handle_data('</%s>' % tag, escape=0) + + # track xml:base and xml:lang going out of scope + if self.basestack: + self.basestack.pop() + if self.basestack and self.basestack[-1]: + self.baseuri = self.basestack[-1] + if self.langstack: + self.langstack.pop() + if self.langstack: # and (self.langstack[-1] is not None): + self.lang = self.langstack[-1] + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + if not self.elementstack: return + ref = ref.lower() + if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): + text = '&#%s;' % ref + else: + if ref[0] == 'x': + c = int(ref[1:], 16) + else: + c = int(ref) + text = unichr(c).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + if not self.elementstack: return + if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) + if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): + text = '&%s;' % ref + elif ref in self.entities.keys(): + text = self.entities[ref] + if text.startswith('&#') and text.endswith(';'): + return self.handle_entityref(text) + else: + try: name2codepoint[ref] + except KeyError: text = '&%s;' % ref + else: text = unichr(name2codepoint[ref]).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_data(self, text, escape=1): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + if not self.elementstack: return + if escape and self.contentparams.get('type') == 'application/xhtml+xml': + text = _xmlescape(text) + self.elementstack[-1][2].append(text) + + def handle_comment(self, text): + # called for each comment, e.g. <!-- insert message here --> + pass + + def handle_pi(self, text): + # called for each processing instruction, e.g. <?instruction> + pass + + def handle_decl(self, text): + pass + + def parse_declaration(self, i): + # override internal declaration handler to handle CDATA blocks + if _debug: sys.stderr.write('entering parse_declaration\n') + if self.rawdata[i:i+9] == '<![CDATA[': + k = self.rawdata.find(']]>', i) + if k == -1: + # CDATA block began but didn't finish + k = len(self.rawdata) + return k + self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) + return k+3 + else: + k = self.rawdata.find('>', i) + if k >= 0: + return k+1 + else: + # We have an incomplete CDATA block. + return k + + def mapContentType(self, contentType): + contentType = contentType.lower() + if contentType == 'text' or contentType == 'plain': + contentType = 'text/plain' + elif contentType == 'html': + contentType = 'text/html' + elif contentType == 'xhtml': + contentType = 'application/xhtml+xml' + return contentType + + def trackNamespace(self, prefix, uri): + loweruri = uri.lower() + if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: + self.version = 'rss090' + if loweruri == 'http://purl.org/rss/1.0/' and not self.version: + self.version = 'rss10' + if loweruri == 'http://www.w3.org/2005/atom' and not self.version: + self.version = 'atom10' + if loweruri.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + uri = 'http://backend.userland.com/rss' + loweruri = uri + if self._matchnamespaces.has_key(loweruri): + self.namespacemap[prefix] = self._matchnamespaces[loweruri] + self.namespacesInUse[self._matchnamespaces[loweruri]] = uri + else: + self.namespacesInUse[prefix or ''] = uri + + def resolveURI(self, uri): + return _urljoin(self.baseuri or '', uri) + + def decodeEntities(self, element, data): + return data + + def strattrs(self, attrs): + return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'"'})) for t in attrs]) + + def push(self, element, expectingText): + self.elementstack.append([element, expectingText, []]) + + def pop(self, element, stripWhitespace=1): + if not self.elementstack: return + if self.elementstack[-1][0] != element: return + + element, expectingText, pieces = self.elementstack.pop() + + if self.version == 'atom10' and self.contentparams.get('type','text') == 'application/xhtml+xml': + # remove enclosing child element, but only if it is a <div> and + # only if all the remaining content is nested underneath it. + # This means that the divs would be retained in the following: + # <div>foo</div><div>bar</div> + while pieces and len(pieces)>1 and not pieces[-1].strip(): + del pieces[-1] + while pieces and len(pieces)>1 and not pieces[0].strip(): + del pieces[0] + if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>': + depth = 0 + for piece in pieces[:-1]: + if piece.startswith('</'): + depth -= 1 + if depth == 0: break + elif piece.startswith('<') and not piece.endswith('/>'): + depth += 1 + else: + pieces = pieces[1:-1] + + # Ensure each piece is a str for Python 3 + for (i, v) in enumerate(pieces): + if not isinstance(v, basestring): + pieces[i] = v.decode('utf-8') + + output = ''.join(pieces) + if stripWhitespace: + output = output.strip() + if not expectingText: return output + + # decode base64 content + if base64 and self.contentparams.get('base64', 0): + try: + output = _base64decode(output) + except binascii.Error: + pass + except binascii.Incomplete: + pass + except TypeError: + # In Python 3, base64 takes and outputs bytes, not str + # This may not be the most correct way to accomplish this + output = _base64decode(output.encode('utf-8')).decode('utf-8') + + # resolve relative URIs + if (element in self.can_be_relative_uri) and output: + output = self.resolveURI(output) + + # decode entities within embedded markup + if not self.contentparams.get('base64', 0): + output = self.decodeEntities(element, output) + + if self.lookslikehtml(output): + self.contentparams['type']='text/html' + + # remove temporary cruft from contentparams + try: + del self.contentparams['mode'] + except KeyError: + pass + try: + del self.contentparams['base64'] + except KeyError: + pass + + is_htmlish = self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types + # resolve relative URIs within embedded markup + if is_htmlish and RESOLVE_RELATIVE_URIS: + if element in self.can_contain_relative_uris: + output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', 'text/html')) + + # parse microformats + # (must do this before sanitizing because some microformats + # rely on elements that we sanitize) + if is_htmlish and element in ['content', 'description', 'summary']: + mfresults = _parseMicroformats(output, self.baseuri, self.encoding) + if mfresults: + for tag in mfresults.get('tags', []): + self._addTag(tag['term'], tag['scheme'], tag['label']) + for enclosure in mfresults.get('enclosures', []): + self._start_enclosure(enclosure) + for xfn in mfresults.get('xfn', []): + self._addXFN(xfn['relationships'], xfn['href'], xfn['name']) + vcard = mfresults.get('vcard') + if vcard: + self._getContext()['vcard'] = vcard + + # sanitize embedded markup + if is_htmlish and SANITIZE_HTML: + if element in self.can_contain_dangerous_markup: + output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', 'text/html')) + + if self.encoding and type(output) != type(u''): + try: + output = unicode(output, self.encoding) + except: + pass + + # address common error where people take data that is already + # utf-8, presume that it is iso-8859-1, and re-encode it. + if self.encoding in ('utf-8', 'utf-8_INVALID_PYTHON_3') and type(output) == type(u''): + try: + output = unicode(output.encode('iso-8859-1'), 'utf-8') + except: + pass + + # map win-1252 extensions to the proper code points + if type(output) == type(u''): + output = u''.join([c in _cp1252.keys() and _cp1252[c] or c for c in output]) + + # categories/tags/keywords/whatever are handled in _end_category + if element == 'category': + return output + + if element == 'title' and self.hasTitle: + return output + + # store output in appropriate place(s) + if self.inentry and not self.insource: + if element == 'content': + self.entries[-1].setdefault(element, []) + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element].append(contentparams) + elif element == 'link': + if not self.inimage: + # query variables in urls in link elements are improperly + # converted from `?a=1&b=2` to `?a=1&b;=2` as if they're + # unhandled character references. fix this special case. + output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output) + self.entries[-1][element] = output + if output: + self.entries[-1]['links'][-1]['href'] = output + else: + if element == 'description': + element = 'summary' + self.entries[-1][element] = output + if self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element + '_detail'] = contentparams + elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage): + context = self._getContext() + if element == 'description': + element = 'subtitle' + context[element] = output + if element == 'link': + # fix query variables; see above for the explanation + output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output) + context[element] = output + context['links'][-1]['href'] = output + elif self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + context[element + '_detail'] = contentparams + return output + + def pushContent(self, tag, attrsD, defaultContentType, expectingText): + self.incontent += 1 + if self.lang: self.lang=self.lang.replace('_','-') + self.contentparams = FeedParserDict({ + 'type': self.mapContentType(attrsD.get('type', defaultContentType)), + 'language': self.lang, + 'base': self.baseuri}) + self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) + self.push(tag, expectingText) + + def popContent(self, tag): + value = self.pop(tag) + self.incontent -= 1 + self.contentparams.clear() + return value + + # a number of elements in a number of RSS variants are nominally plain + # text, but this is routinely ignored. This is an attempt to detect + # the most common cases. As false positives often result in silent + # data loss, this function errs on the conservative side. + def lookslikehtml(self, s): + if self.version.startswith('atom'): return + if self.contentparams.get('type','text/html') != 'text/plain': return + + # must have a close tag or a entity reference to qualify + if not (re.search(r'</(\w+)>',s) or re.search("&#?\w+;",s)): return + + # all tags must be in a restricted subset of valid HTML tags + if filter(lambda t: t.lower() not in _HTMLSanitizer.acceptable_elements, + re.findall(r'</?(\w+)',s)): return + + # all entities must have been defined as valid HTML entities + from htmlentitydefs import entitydefs + if filter(lambda e: e not in entitydefs.keys(), + re.findall(r'&(\w+);',s)): return + + return 1 + + def _mapToStandardPrefix(self, name): + colonpos = name.find(':') + if colonpos <> -1: + prefix = name[:colonpos] + suffix = name[colonpos+1:] + prefix = self.namespacemap.get(prefix, prefix) + name = prefix + ':' + suffix + return name + + def _getAttribute(self, attrsD, name): + return attrsD.get(self._mapToStandardPrefix(name)) + + def _isBase64(self, attrsD, contentparams): + if attrsD.get('mode', '') == 'base64': + return 1 + if self.contentparams['type'].startswith('text/'): + return 0 + if self.contentparams['type'].endswith('+xml'): + return 0 + if self.contentparams['type'].endswith('/xml'): + return 0 + return 1 + + def _itsAnHrefDamnIt(self, attrsD): + href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) + if href: + try: + del attrsD['url'] + except KeyError: + pass + try: + del attrsD['uri'] + except KeyError: + pass + attrsD['href'] = href + return attrsD + + def _save(self, key, value, overwrite=False): + context = self._getContext() + if overwrite: + context[key] = value + else: + context.setdefault(key, value) + + def _start_rss(self, attrsD): + versionmap = {'0.91': 'rss091u', + '0.92': 'rss092', + '0.93': 'rss093', + '0.94': 'rss094'} + #If we're here then this is an RSS feed. + #If we don't have a version or have a version that starts with something + #other than RSS then there's been a mistake. Correct it. + if not self.version or not self.version.startswith('rss'): + attr_version = attrsD.get('version', '') + version = versionmap.get(attr_version) + if version: + self.version = version + elif attr_version.startswith('2.'): + self.version = 'rss20' + else: + self.version = 'rss' + + def _start_dlhottitles(self, attrsD): + self.version = 'hotrss' + + def _start_channel(self, attrsD): + self.infeed = 1 + self._cdf_common(attrsD) + _start_feedinfo = _start_channel + + def _cdf_common(self, attrsD): + if attrsD.has_key('lastmod'): + self._start_modified({}) + self.elementstack[-1][-1] = attrsD['lastmod'] + self._end_modified() + if attrsD.has_key('href'): + self._start_link({}) + self.elementstack[-1][-1] = attrsD['href'] + self._end_link() + + def _start_feed(self, attrsD): + self.infeed = 1 + versionmap = {'0.1': 'atom01', + '0.2': 'atom02', + '0.3': 'atom03'} + if not self.version: + attr_version = attrsD.get('version') + version = versionmap.get(attr_version) + if version: + self.version = version + else: + self.version = 'atom' + + def _end_channel(self): + self.infeed = 0 + _end_feed = _end_channel + + def _start_image(self, attrsD): + context = self._getContext() + if not self.inentry: + context.setdefault('image', FeedParserDict()) + self.inimage = 1 + self.hasTitle = 0 + self.push('image', 0) + + def _end_image(self): + self.pop('image') + self.inimage = 0 + + def _start_textinput(self, attrsD): + context = self._getContext() + context.setdefault('textinput', FeedParserDict()) + self.intextinput = 1 + self.hasTitle = 0 + self.push('textinput', 0) + _start_textInput = _start_textinput + + def _end_textinput(self): + self.pop('textinput') + self.intextinput = 0 + _end_textInput = _end_textinput + + def _start_author(self, attrsD): + self.inauthor = 1 + self.push('author', 1) + # Append a new FeedParserDict when expecting an author + context = self._getContext() + context.setdefault('authors', []) + context['authors'].append(FeedParserDict()) + _start_managingeditor = _start_author + _start_dc_author = _start_author + _start_dc_creator = _start_author + _start_itunes_author = _start_author + + def _end_author(self): + self.pop('author') + self.inauthor = 0 + self._sync_author_detail() + _end_managingeditor = _end_author + _end_dc_author = _end_author + _end_dc_creator = _end_author + _end_itunes_author = _end_author + + def _start_itunes_owner(self, attrsD): + self.inpublisher = 1 + self.push('publisher', 0) + + def _end_itunes_owner(self): + self.pop('publisher') + self.inpublisher = 0 + self._sync_author_detail('publisher') + + def _start_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('contributor', 0) + + def _end_contributor(self): + self.pop('contributor') + self.incontributor = 0 + + def _start_dc_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('name', 0) + + def _end_dc_contributor(self): + self._end_name() + self.incontributor = 0 + + def _start_name(self, attrsD): + self.push('name', 0) + _start_itunes_name = _start_name + + def _end_name(self): + value = self.pop('name') + if self.inpublisher: + self._save_author('name', value, 'publisher') + elif self.inauthor: + self._save_author('name', value) + elif self.incontributor: + self._save_contributor('name', value) + elif self.intextinput: + context = self._getContext() + context['name'] = value + _end_itunes_name = _end_name + + def _start_width(self, attrsD): + self.push('width', 0) + + def _end_width(self): + value = self.pop('width') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['width'] = value + + def _start_height(self, attrsD): + self.push('height', 0) + + def _end_height(self): + value = self.pop('height') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['height'] = value + + def _start_url(self, attrsD): + self.push('href', 1) + _start_homepage = _start_url + _start_uri = _start_url + + def _end_url(self): + value = self.pop('href') + if self.inauthor: + self._save_author('href', value) + elif self.incontributor: + self._save_contributor('href', value) + _end_homepage = _end_url + _end_uri = _end_url + + def _start_email(self, attrsD): + self.push('email', 0) + _start_itunes_email = _start_email + + def _end_email(self): + value = self.pop('email') + if self.inpublisher: + self._save_author('email', value, 'publisher') + elif self.inauthor: + self._save_author('email', value) + elif self.incontributor: + self._save_contributor('email', value) + _end_itunes_email = _end_email + + def _getContext(self): + if self.insource: + context = self.sourcedata + elif self.inimage and self.feeddata.has_key('image'): + context = self.feeddata['image'] + elif self.intextinput: + context = self.feeddata['textinput'] + elif self.inentry: + context = self.entries[-1] + else: + context = self.feeddata + return context + + def _save_author(self, key, value, prefix='author'): + context = self._getContext() + context.setdefault(prefix + '_detail', FeedParserDict()) + context[prefix + '_detail'][key] = value + self._sync_author_detail() + context.setdefault('authors', [FeedParserDict()]) + context['authors'][-1][key] = value + + def _save_contributor(self, key, value): + context = self._getContext() + context.setdefault('contributors', [FeedParserDict()]) + context['contributors'][-1][key] = value + + def _sync_author_detail(self, key='author'): + context = self._getContext() + detail = context.get('%s_detail' % key) + if detail: + name = detail.get('name') + email = detail.get('email') + if name and email: + context[key] = '%s (%s)' % (name, email) + elif name: + context[key] = name + elif email: + context[key] = email + else: + author, email = context.get(key), None + if not author: return + emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author) + if emailmatch: + email = emailmatch.group(0) + # probably a better way to do the following, but it passes all the tests + author = author.replace(email, '') + author = author.replace('()', '') + author = author.replace('<>', '') + author = author.replace('<>', '') + author = author.strip() + if author and (author[0] == '('): + author = author[1:] + if author and (author[-1] == ')'): + author = author[:-1] + author = author.strip() + if author or email: + context.setdefault('%s_detail' % key, FeedParserDict()) + if author: + context['%s_detail' % key]['name'] = author + if email: + context['%s_detail' % key]['email'] = email + + def _start_subtitle(self, attrsD): + self.pushContent('subtitle', attrsD, 'text/plain', 1) + _start_tagline = _start_subtitle + _start_itunes_subtitle = _start_subtitle + + def _end_subtitle(self): + self.popContent('subtitle') + _end_tagline = _end_subtitle + _end_itunes_subtitle = _end_subtitle + + def _start_rights(self, attrsD): + self.pushContent('rights', attrsD, 'text/plain', 1) + _start_dc_rights = _start_rights + _start_copyright = _start_rights + + def _end_rights(self): + self.popContent('rights') + _end_dc_rights = _end_rights + _end_copyright = _end_rights + + def _start_item(self, attrsD): + self.entries.append(FeedParserDict()) + self.push('item', 0) + self.inentry = 1 + self.guidislink = 0 + self.hasTitle = 0 + id = self._getAttribute(attrsD, 'rdf:about') + if id: + context = self._getContext() + context['id'] = id + self._cdf_common(attrsD) + _start_entry = _start_item + _start_product = _start_item + + def _end_item(self): + self.pop('item') + self.inentry = 0 + _end_entry = _end_item + + def _start_dc_language(self, attrsD): + self.push('language', 1) + _start_language = _start_dc_language + + def _end_dc_language(self): + self.lang = self.pop('language') + _end_language = _end_dc_language + + def _start_dc_publisher(self, attrsD): + self.push('publisher', 1) + _start_webmaster = _start_dc_publisher + + def _end_dc_publisher(self): + self.pop('publisher') + self._sync_author_detail('publisher') + _end_webmaster = _end_dc_publisher + + def _start_published(self, attrsD): + self.push('published', 1) + _start_dcterms_issued = _start_published + _start_issued = _start_published + + def _end_published(self): + value = self.pop('published') + self._save('published_parsed', _parse_date(value), overwrite=True) + _end_dcterms_issued = _end_published + _end_issued = _end_published + + def _start_updated(self, attrsD): + self.push('updated', 1) + _start_modified = _start_updated + _start_dcterms_modified = _start_updated + _start_pubdate = _start_updated + _start_dc_date = _start_updated + _start_lastbuilddate = _start_updated + + def _end_updated(self): + value = self.pop('updated') + parsed_value = _parse_date(value) + self._save('updated_parsed', parsed_value, overwrite=True) + _end_modified = _end_updated + _end_dcterms_modified = _end_updated + _end_pubdate = _end_updated + _end_dc_date = _end_updated + _end_lastbuilddate = _end_updated + + def _start_created(self, attrsD): + self.push('created', 1) + _start_dcterms_created = _start_created + + def _end_created(self): + value = self.pop('created') + self._save('created_parsed', _parse_date(value), overwrite=True) + _end_dcterms_created = _end_created + + def _start_expirationdate(self, attrsD): + self.push('expired', 1) + + def _end_expirationdate(self): + self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True) + + def _start_cc_license(self, attrsD): + context = self._getContext() + value = self._getAttribute(attrsD, 'rdf:resource') + attrsD = FeedParserDict() + attrsD['rel']='license' + if value: attrsD['href']=value + context.setdefault('links', []).append(attrsD) + + def _start_creativecommons_license(self, attrsD): + self.push('license', 1) + _start_creativeCommons_license = _start_creativecommons_license + + def _end_creativecommons_license(self): + value = self.pop('license') + context = self._getContext() + attrsD = FeedParserDict() + attrsD['rel']='license' + if value: attrsD['href']=value + context.setdefault('links', []).append(attrsD) + del context['license'] + _end_creativeCommons_license = _end_creativecommons_license + + def _addXFN(self, relationships, href, name): + context = self._getContext() + xfn = context.setdefault('xfn', []) + value = FeedParserDict({'relationships': relationships, 'href': href, 'name': name}) + if value not in xfn: + xfn.append(value) + + def _addTag(self, term, scheme, label): + context = self._getContext() + tags = context.setdefault('tags', []) + if (not term) and (not scheme) and (not label): return + value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) + if value not in tags: + tags.append(value) + + def _start_category(self, attrsD): + if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) + term = attrsD.get('term') + scheme = attrsD.get('scheme', attrsD.get('domain')) + label = attrsD.get('label') + self._addTag(term, scheme, label) + self.push('category', 1) + _start_dc_subject = _start_category + _start_keywords = _start_category + + def _start_media_category(self, attrsD): + attrsD.setdefault('scheme', 'http://search.yahoo.com/mrss/category_schema') + self._start_category(attrsD) + + def _end_itunes_keywords(self): + for term in self.pop('itunes_keywords').split(): + self._addTag(term, 'http://www.itunes.com/', None) + + def _start_itunes_category(self, attrsD): + self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) + self.push('category', 1) + + def _end_category(self): + value = self.pop('category') + if not value: return + context = self._getContext() + tags = context['tags'] + if value and len(tags) and not tags[-1]['term']: + tags[-1]['term'] = value + else: + self._addTag(value, None, None) + _end_dc_subject = _end_category + _end_keywords = _end_category + _end_itunes_category = _end_category + _end_media_category = _end_category + + def _start_cloud(self, attrsD): + self._getContext()['cloud'] = FeedParserDict(attrsD) + + def _start_link(self, attrsD): + attrsD.setdefault('rel', 'alternate') + if attrsD['rel'] == 'self': + attrsD.setdefault('type', 'application/atom+xml') + else: + attrsD.setdefault('type', 'text/html') + context = self._getContext() + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + expectingText = self.infeed or self.inentry or self.insource + context.setdefault('links', []) + if not (self.inentry and self.inimage): + context['links'].append(FeedParserDict(attrsD)) + if attrsD.has_key('href'): + expectingText = 0 + if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): + context['link'] = attrsD['href'] + else: + self.push('link', expectingText) + _start_producturl = _start_link + + def _end_link(self): + value = self.pop('link') + context = self._getContext() + _end_producturl = _end_link + + def _start_guid(self, attrsD): + self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') + self.push('id', 1) + + def _end_guid(self): + value = self.pop('id') + self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) + if self.guidislink: + # guid acts as link, but only if 'ispermalink' is not present or is 'true', + # and only if the item doesn't already have a link element + self._save('link', value) + + def _start_title(self, attrsD): + if self.svgOK: return self.unknown_starttag('title', attrsD.items()) + self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + _start_dc_title = _start_title + _start_media_title = _start_title + + def _end_title(self): + if self.svgOK: return + value = self.popContent('title') + if not value: return + context = self._getContext() + self.hasTitle = 1 + _end_dc_title = _end_title + + def _end_media_title(self): + hasTitle = self.hasTitle + self._end_title() + self.hasTitle = hasTitle + + def _start_description(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) + _start_dc_description = _start_description + + def _start_abstract(self, attrsD): + self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + + def _end_description(self): + if self._summaryKey == 'content': + self._end_content() + else: + value = self.popContent('description') + self._summaryKey = None + _end_abstract = _end_description + _end_dc_description = _end_description + + def _start_info(self, attrsD): + self.pushContent('info', attrsD, 'text/plain', 1) + _start_feedburner_browserfriendly = _start_info + + def _end_info(self): + self.popContent('info') + _end_feedburner_browserfriendly = _end_info + + def _start_generator(self, attrsD): + if attrsD: + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + self._getContext()['generator_detail'] = FeedParserDict(attrsD) + self.push('generator', 1) + + def _end_generator(self): + value = self.pop('generator') + context = self._getContext() + if context.has_key('generator_detail'): + context['generator_detail']['name'] = value + + def _start_admin_generatoragent(self, attrsD): + self.push('generator', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('generator') + self._getContext()['generator_detail'] = FeedParserDict({'href': value}) + + def _start_admin_errorreportsto(self, attrsD): + self.push('errorreportsto', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('errorreportsto') + + def _start_summary(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self._summaryKey = 'summary' + self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) + _start_itunes_summary = _start_summary + + def _end_summary(self): + if self._summaryKey == 'content': + self._end_content() + else: + self.popContent(self._summaryKey or 'summary') + self._summaryKey = None + _end_itunes_summary = _end_summary + + def _start_enclosure(self, attrsD): + attrsD = self._itsAnHrefDamnIt(attrsD) + context = self._getContext() + attrsD['rel']='enclosure' + context.setdefault('links', []).append(FeedParserDict(attrsD)) + + def _start_source(self, attrsD): + if 'url' in attrsD: + # This means that we're processing a source element from an RSS 2.0 feed + self.sourcedata['href'] = attrsD[u'url'] + self.push('source', 1) + self.insource = 1 + self.hasTitle = 0 + + def _end_source(self): + self.insource = 0 + value = self.pop('source') + if value: + self.sourcedata['title'] = value + self._getContext()['source'] = copy.deepcopy(self.sourcedata) + self.sourcedata.clear() + + def _start_content(self, attrsD): + self.pushContent('content', attrsD, 'text/plain', 1) + src = attrsD.get('src') + if src: + self.contentparams['src'] = src + self.push('content', 1) + + def _start_prodlink(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + + def _start_body(self, attrsD): + self.pushContent('content', attrsD, 'application/xhtml+xml', 1) + _start_xhtml_body = _start_body + + def _start_content_encoded(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + _start_fullitem = _start_content_encoded + + def _end_content(self): + copyToSummary = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) + value = self.popContent('content') + if copyToSummary: + self._save('summary', value) + + _end_body = _end_content + _end_xhtml_body = _end_content + _end_content_encoded = _end_content + _end_fullitem = _end_content + _end_prodlink = _end_content + + def _start_itunes_image(self, attrsD): + self.push('itunes_image', 0) + if attrsD.get('href'): + self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) + _start_itunes_link = _start_itunes_image + + def _end_itunes_block(self): + value = self.pop('itunes_block', 0) + self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 + + def _end_itunes_explicit(self): + value = self.pop('itunes_explicit', 0) + # Convert 'yes' -> True, 'clean' to False, and any other value to None + # False and None both evaluate as False, so the difference can be ignored + # by applications that only need to know if the content is explicit. + self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0] + + def _start_media_content(self, attrsD): + context = self._getContext() + context.setdefault('media_content', []) + context['media_content'].append(attrsD) + + def _start_media_thumbnail(self, attrsD): + context = self._getContext() + context.setdefault('media_thumbnail', []) + self.push('url', 1) # new + context['media_thumbnail'].append(attrsD) + + def _end_media_thumbnail(self): + url = self.pop('url') + context = self._getContext() + if url != None and len(url.strip()) != 0: + if not context['media_thumbnail'][-1].has_key('url'): + context['media_thumbnail'][-1]['url'] = url + + def _start_media_player(self, attrsD): + self.push('media_player', 0) + self._getContext()['media_player'] = FeedParserDict(attrsD) + + def _end_media_player(self): + value = self.pop('media_player') + context = self._getContext() + context['media_player']['content'] = value + + def _start_newlocation(self, attrsD): + self.push('newlocation', 1) + + def _end_newlocation(self): + url = self.pop('newlocation') + context = self._getContext() + # don't set newlocation if the context isn't right + if context is not self.feeddata: + return + context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip()) + +if _XML_AVAILABLE: + class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): + def __init__(self, baseuri, baselang, encoding): + if _debug: sys.stderr.write('trying StrictFeedParser\n') + xml.sax.handler.ContentHandler.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + self.bozo = 0 + self.exc = None + self.decls = {} + + def startPrefixMapping(self, prefix, uri): + self.trackNamespace(prefix, uri) + if uri == 'http://www.w3.org/1999/xlink': + self.decls['xmlns:'+prefix] = uri + + def startElementNS(self, name, qname, attrs): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if lowernamespace.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + namespace = 'http://backend.userland.com/rss' + lowernamespace = namespace + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = None + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): + raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix + localname = str(localname).lower() + + # qname implementation is horribly broken in Python 2.1 (it + # doesn't report any), and slightly broken in Python 2.2 (it + # doesn't report the xml: namespace). So we match up namespaces + # with a known list first, and then possibly override them with + # the qnames the SAX parser gives us (if indeed it gives us any + # at all). Thanks to MatejC for helping me test this and + # tirelessly telling me that it didn't work yet. + attrsD, self.decls = self.decls, {} + if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML': + attrsD['xmlns']=namespace + if localname=='svg' and namespace=='http://www.w3.org/2000/svg': + attrsD['xmlns']=namespace + + if prefix: + localname = prefix.lower() + ':' + localname + elif namespace and not qname: #Expat + for name,value in self.namespacesInUse.items(): + if name and value == namespace: + localname = name + ':' + localname + break + if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) + + for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): + lowernamespace = (namespace or '').lower() + prefix = self._matchnamespaces.get(lowernamespace, '') + if prefix: + attrlocalname = prefix + ':' + attrlocalname + attrsD[str(attrlocalname).lower()] = attrvalue + for qname in attrs.getQNames(): + attrsD[str(qname).lower()] = attrs.getValueByQName(qname) + self.unknown_starttag(localname, attrsD.items()) + + def characters(self, text): + self.handle_data(text) + + def endElementNS(self, name, qname): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = '' + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if prefix: + localname = prefix + ':' + localname + elif namespace and not qname: #Expat + for name,value in self.namespacesInUse.items(): + if name and value == namespace: + localname = name + ':' + localname + break + localname = str(localname).lower() + self.unknown_endtag(localname) + + def error(self, exc): + self.bozo = 1 + self.exc = exc + + def fatalError(self, exc): + self.error(exc) + raise exc + +class _BaseHTMLProcessor(sgmllib.SGMLParser): + special = re.compile('''[<>'"]''') + bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)") + elements_no_end_tag = [ + 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', + 'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param', + 'source', 'track', 'wbr' + ] + + def __init__(self, encoding, _type): + self.encoding = encoding + self._type = _type + if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) + sgmllib.SGMLParser.__init__(self) + + def reset(self): + self.pieces = [] + sgmllib.SGMLParser.reset(self) + + def _shorttag_replace(self, match): + tag = match.group(1) + if tag in self.elements_no_end_tag: + return '<' + tag + ' />' + else: + return '<' + tag + '></' + tag + '>' + + def parse_starttag(self,i): + j=sgmllib.SGMLParser.parse_starttag(self, i) + if self._type == 'application/xhtml+xml': + if j>2 and self.rawdata[j-2:j]=='/>': + self.unknown_endtag(self.lasttag) + return j + + def feed(self, data): + data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'<!\1', data) + #data = re.sub(r'<(\S+?)\s*?/>', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace + data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data) + data = data.replace(''', "'") + data = data.replace('"', '"') + try: + bytes + if bytes is str: + raise NameError + self.encoding = self.encoding + '_INVALID_PYTHON_3' + except NameError: + if self.encoding and type(data) == type(u''): + data = data.encode(self.encoding) + sgmllib.SGMLParser.feed(self, data) + sgmllib.SGMLParser.close(self) + + def normalize_attrs(self, attrs): + if not attrs: return attrs + # utility method to be called by descendants + attrs = dict([(k.lower(), v) for k, v in attrs]).items() + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + attrs.sort() + return attrs + + def unknown_starttag(self, tag, attrs): + # called for each start tag + # attrs is a list of (attr, value) tuples + # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')] + if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag) + uattrs = [] + strattrs='' + if attrs: + for key, value in attrs: + value=value.replace('>','>').replace('<','<').replace('"','"') + value = self.bare_ampersand.sub("&", value) + # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds + if type(value) != type(u''): + try: + value = unicode(value, self.encoding) + except: + value = unicode(value, 'iso-8859-1') + try: + # Currently, in Python 3 the key is already a str, and cannot be decoded again + uattrs.append((unicode(key, self.encoding), value)) + except TypeError: + uattrs.append((key, value)) + strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]) + if self.encoding: + try: + strattrs=strattrs.encode(self.encoding) + except: + pass + if tag in self.elements_no_end_tag: + self.pieces.append('<%(tag)s%(strattrs)s />' % locals()) + else: + self.pieces.append('<%(tag)s%(strattrs)s>' % locals()) + + def unknown_endtag(self, tag): + # called for each end tag, e.g. for </pre>, tag will be 'pre' + # Reconstruct the original end tag. + if tag not in self.elements_no_end_tag: + self.pieces.append("</%(tag)s>" % locals()) + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + # Reconstruct the original character reference. + if ref.startswith('x'): + value = unichr(int(ref[1:],16)) + else: + value = unichr(int(ref)) + + if value in _cp1252.keys(): + self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:]) + else: + self.pieces.append('&#%(ref)s;' % locals()) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + # Reconstruct the original entity reference. + if name2codepoint.has_key(ref): + self.pieces.append('&%(ref)s;' % locals()) + else: + self.pieces.append('&%(ref)s' % locals()) + + def handle_data(self, text): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + # Store the original text verbatim. + if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_data, text=%s\n' % text) + self.pieces.append(text) + + def handle_comment(self, text): + # called for each HTML comment, e.g. <!-- insert Javascript code here --> + # Reconstruct the original comment. + self.pieces.append('<!--%(text)s-->' % locals()) + + def handle_pi(self, text): + # called for each processing instruction, e.g. <?instruction> + # Reconstruct original processing instruction. + self.pieces.append('<?%(text)s>' % locals()) + + def handle_decl(self, text): + # called for the DOCTYPE, if present, e.g. + # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + # "http://www.w3.org/TR/html4/loose.dtd"> + # Reconstruct original DOCTYPE + self.pieces.append('<!%(text)s>' % locals()) + + _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match + def _scan_name(self, i, declstartpos): + rawdata = self.rawdata + n = len(rawdata) + if i == n: + return None, -1 + m = self._new_declname_match(rawdata, i) + if m: + s = m.group() + name = s.strip() + if (i + len(s)) == n: + return None, -1 # end of buffer + return name.lower(), m.end() + else: + self.handle_data(rawdata) +# self.updatepos(declstartpos, i) + return None, -1 + + def convert_charref(self, name): + return '&#%s;' % name + + def convert_entityref(self, name): + return '&%s;' % name + + def output(self): + '''Return processed HTML as a single string''' + return ''.join([str(p) for p in self.pieces]) + + def parse_declaration(self, i): + try: + return sgmllib.SGMLParser.parse_declaration(self, i) + except sgmllib.SGMLParseError: + # escape the doctype declaration and continue parsing + self.handle_data('<') + return i+1 + +class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): + def __init__(self, baseuri, baselang, encoding, entities): + sgmllib.SGMLParser.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + _BaseHTMLProcessor.__init__(self, encoding, 'application/xhtml+xml') + self.entities=entities + + def decodeEntities(self, element, data): + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace('"', '"') + data = data.replace(''', ''') + data = data.replace(''', ''') + if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace(''', "'") + return data + + def strattrs(self, attrs): + return ''.join([' %s="%s"' % (n,v.replace('"','"')) for n,v in attrs]) + +class _MicroformatsParser: + STRING = 1 + DATE = 2 + URI = 3 + NODE = 4 + EMAIL = 5 + + known_xfn_relationships = ['contact', 'acquaintance', 'friend', 'met', 'co-worker', 'coworker', 'colleague', 'co-resident', 'coresident', 'neighbor', 'child', 'parent', 'sibling', 'brother', 'sister', 'spouse', 'wife', 'husband', 'kin', 'relative', 'muse', 'crush', 'date', 'sweetheart', 'me'] + known_binary_extensions = ['zip','rar','exe','gz','tar','tgz','tbz2','bz2','z','7z','dmg','img','sit','sitx','hqx','deb','rpm','bz2','jar','rar','iso','bin','msi','mp2','mp3','ogg','ogm','mp4','m4v','m4a','avi','wma','wmv'] + + def __init__(self, data, baseuri, encoding): + self.document = BeautifulSoup.BeautifulSoup(data) + self.baseuri = baseuri + self.encoding = encoding + if type(data) == type(u''): + data = data.encode(encoding) + self.tags = [] + self.enclosures = [] + self.xfn = [] + self.vcard = None + + def vcardEscape(self, s): + if type(s) in (type(''), type(u'')): + s = s.replace(',', '\\,').replace(';', '\\;').replace('\n', '\\n') + return s + + def vcardFold(self, s): + s = re.sub(';+$', '', s) + sFolded = '' + iMax = 75 + sPrefix = '' + while len(s) > iMax: + sFolded += sPrefix + s[:iMax] + '\n' + s = s[iMax:] + sPrefix = ' ' + iMax = 74 + sFolded += sPrefix + s + return sFolded + + def normalize(self, s): + return re.sub(r'\s+', ' ', s).strip() + + def unique(self, aList): + results = [] + for element in aList: + if element not in results: + results.append(element) + return results + + def toISO8601(self, dt): + return time.strftime('%Y-%m-%dT%H:%M:%SZ', dt) + + def getPropertyValue(self, elmRoot, sProperty, iPropertyType=4, bAllowMultiple=0, bAutoEscape=0): + all = lambda x: 1 + sProperty = sProperty.lower() + bFound = 0 + bNormalize = 1 + propertyMatch = {'class': re.compile(r'\b%s\b' % sProperty)} + if bAllowMultiple and (iPropertyType != self.NODE): + snapResults = [] + containers = elmRoot(['ul', 'ol'], propertyMatch) + for container in containers: + snapResults.extend(container('li')) + bFound = (len(snapResults) != 0) + if not bFound: + snapResults = elmRoot(all, propertyMatch) + bFound = (len(snapResults) != 0) + if (not bFound) and (sProperty == 'value'): + snapResults = elmRoot('pre') + bFound = (len(snapResults) != 0) + bNormalize = not bFound + if not bFound: + snapResults = [elmRoot] + bFound = (len(snapResults) != 0) + arFilter = [] + if sProperty == 'vcard': + snapFilter = elmRoot(all, propertyMatch) + for node in snapFilter: + if node.findParent(all, propertyMatch): + arFilter.append(node) + arResults = [] + for node in snapResults: + if node not in arFilter: + arResults.append(node) + bFound = (len(arResults) != 0) + if not bFound: + if bAllowMultiple: return [] + elif iPropertyType == self.STRING: return '' + elif iPropertyType == self.DATE: return None + elif iPropertyType == self.URI: return '' + elif iPropertyType == self.NODE: return None + else: return None + arValues = [] + for elmResult in arResults: + sValue = None + if iPropertyType == self.NODE: + if bAllowMultiple: + arValues.append(elmResult) + continue + else: + return elmResult + sNodeName = elmResult.name.lower() + if (iPropertyType == self.EMAIL) and (sNodeName == 'a'): + sValue = (elmResult.get('href') or '').split('mailto:').pop().split('?')[0] + if sValue: + sValue = bNormalize and self.normalize(sValue) or sValue.strip() + if (not sValue) and (sNodeName == 'abbr'): + sValue = elmResult.get('title') + if sValue: + sValue = bNormalize and self.normalize(sValue) or sValue.strip() + if (not sValue) and (iPropertyType == self.URI): + if sNodeName == 'a': sValue = elmResult.get('href') + elif sNodeName == 'img': sValue = elmResult.get('src') + elif sNodeName == 'object': sValue = elmResult.get('data') + if sValue: + sValue = bNormalize and self.normalize(sValue) or sValue.strip() + if (not sValue) and (sNodeName == 'img'): + sValue = elmResult.get('alt') + if sValue: + sValue = bNormalize and self.normalize(sValue) or sValue.strip() + if not sValue: + sValue = elmResult.renderContents() + sValue = re.sub(r'<\S[^>]*>', '', sValue) + sValue = sValue.replace('\r\n', '\n') + sValue = sValue.replace('\r', '\n') + if sValue: + sValue = bNormalize and self.normalize(sValue) or sValue.strip() + if not sValue: continue + if iPropertyType == self.DATE: + sValue = _parse_date_iso8601(sValue) + if bAllowMultiple: + arValues.append(bAutoEscape and self.vcardEscape(sValue) or sValue) + else: + return bAutoEscape and self.vcardEscape(sValue) or sValue + return arValues + + def findVCards(self, elmRoot, bAgentParsing=0): + sVCards = '' + + if not bAgentParsing: + arCards = self.getPropertyValue(elmRoot, 'vcard', bAllowMultiple=1) + else: + arCards = [elmRoot] + + for elmCard in arCards: + arLines = [] + + def processSingleString(sProperty): + sValue = self.getPropertyValue(elmCard, sProperty, self.STRING, bAutoEscape=1).decode(self.encoding) + if sValue: + arLines.append(self.vcardFold(sProperty.upper() + ':' + sValue)) + return sValue or u'' + + def processSingleURI(sProperty): + sValue = self.getPropertyValue(elmCard, sProperty, self.URI) + if sValue: + sContentType = '' + sEncoding = '' + sValueKey = '' + if sValue.startswith('data:'): + sEncoding = ';ENCODING=b' + sContentType = sValue.split(';')[0].split('/').pop() + sValue = sValue.split(',', 1).pop() + else: + elmValue = self.getPropertyValue(elmCard, sProperty) + if elmValue: + if sProperty != 'url': + sValueKey = ';VALUE=uri' + sContentType = elmValue.get('type', '').strip().split('/').pop().strip() + sContentType = sContentType.upper() + if sContentType == 'OCTET-STREAM': + sContentType = '' + if sContentType: + sContentType = ';TYPE=' + sContentType.upper() + arLines.append(self.vcardFold(sProperty.upper() + sEncoding + sContentType + sValueKey + ':' + sValue)) + + def processTypeValue(sProperty, arDefaultType, arForceType=None): + arResults = self.getPropertyValue(elmCard, sProperty, bAllowMultiple=1) + for elmResult in arResults: + arType = self.getPropertyValue(elmResult, 'type', self.STRING, 1, 1) + if arForceType: + arType = self.unique(arForceType + arType) + if not arType: + arType = arDefaultType + sValue = self.getPropertyValue(elmResult, 'value', self.EMAIL, 0) + if sValue: + arLines.append(self.vcardFold(sProperty.upper() + ';TYPE=' + ','.join(arType) + ':' + sValue)) + + # AGENT + # must do this before all other properties because it is destructive + # (removes nested class="vcard" nodes so they don't interfere with + # this vcard's other properties) + arAgent = self.getPropertyValue(elmCard, 'agent', bAllowMultiple=1) + for elmAgent in arAgent: + if re.compile(r'\bvcard\b').search(elmAgent.get('class')): + sAgentValue = self.findVCards(elmAgent, 1) + '\n' + sAgentValue = sAgentValue.replace('\n', '\\n') + sAgentValue = sAgentValue.replace(';', '\\;') + if sAgentValue: + arLines.append(self.vcardFold('AGENT:' + sAgentValue)) + # Completely remove the agent element from the parse tree + elmAgent.extract() + else: + sAgentValue = self.getPropertyValue(elmAgent, 'value', self.URI, bAutoEscape=1); + if sAgentValue: + arLines.append(self.vcardFold('AGENT;VALUE=uri:' + sAgentValue)) + + # FN (full name) + sFN = processSingleString('fn') + + # N (name) + elmName = self.getPropertyValue(elmCard, 'n') + if elmName: + sFamilyName = self.getPropertyValue(elmName, 'family-name', self.STRING, bAutoEscape=1) + sGivenName = self.getPropertyValue(elmName, 'given-name', self.STRING, bAutoEscape=1) + arAdditionalNames = self.getPropertyValue(elmName, 'additional-name', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'additional-names', self.STRING, 1, 1) + arHonorificPrefixes = self.getPropertyValue(elmName, 'honorific-prefix', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'honorific-prefixes', self.STRING, 1, 1) + arHonorificSuffixes = self.getPropertyValue(elmName, 'honorific-suffix', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'honorific-suffixes', self.STRING, 1, 1) + arLines.append(self.vcardFold('N:' + sFamilyName + ';' + + sGivenName + ';' + + ','.join(arAdditionalNames) + ';' + + ','.join(arHonorificPrefixes) + ';' + + ','.join(arHonorificSuffixes))) + elif sFN: + # implied "N" optimization + # http://microformats.org/wiki/hcard#Implied_.22N.22_Optimization + arNames = self.normalize(sFN).split() + if len(arNames) == 2: + bFamilyNameFirst = (arNames[0].endswith(',') or + len(arNames[1]) == 1 or + ((len(arNames[1]) == 2) and (arNames[1].endswith('.')))) + if bFamilyNameFirst: + arLines.append(self.vcardFold('N:' + arNames[0] + ';' + arNames[1])) + else: + arLines.append(self.vcardFold('N:' + arNames[1] + ';' + arNames[0])) + + # SORT-STRING + sSortString = self.getPropertyValue(elmCard, 'sort-string', self.STRING, bAutoEscape=1) + if sSortString: + arLines.append(self.vcardFold('SORT-STRING:' + sSortString)) + + # NICKNAME + arNickname = self.getPropertyValue(elmCard, 'nickname', self.STRING, 1, 1) + if arNickname: + arLines.append(self.vcardFold('NICKNAME:' + ','.join(arNickname))) + + # PHOTO + processSingleURI('photo') + + # BDAY + dtBday = self.getPropertyValue(elmCard, 'bday', self.DATE) + if dtBday: + arLines.append(self.vcardFold('BDAY:' + self.toISO8601(dtBday))) + + # ADR (address) + arAdr = self.getPropertyValue(elmCard, 'adr', bAllowMultiple=1) + for elmAdr in arAdr: + arType = self.getPropertyValue(elmAdr, 'type', self.STRING, 1, 1) + if not arType: + arType = ['intl','postal','parcel','work'] # default adr types, see RFC 2426 section 3.2.1 + sPostOfficeBox = self.getPropertyValue(elmAdr, 'post-office-box', self.STRING, 0, 1) + sExtendedAddress = self.getPropertyValue(elmAdr, 'extended-address', self.STRING, 0, 1) + sStreetAddress = self.getPropertyValue(elmAdr, 'street-address', self.STRING, 0, 1) + sLocality = self.getPropertyValue(elmAdr, 'locality', self.STRING, 0, 1) + sRegion = self.getPropertyValue(elmAdr, 'region', self.STRING, 0, 1) + sPostalCode = self.getPropertyValue(elmAdr, 'postal-code', self.STRING, 0, 1) + sCountryName = self.getPropertyValue(elmAdr, 'country-name', self.STRING, 0, 1) + arLines.append(self.vcardFold('ADR;TYPE=' + ','.join(arType) + ':' + + sPostOfficeBox + ';' + + sExtendedAddress + ';' + + sStreetAddress + ';' + + sLocality + ';' + + sRegion + ';' + + sPostalCode + ';' + + sCountryName)) + + # LABEL + processTypeValue('label', ['intl','postal','parcel','work']) + + # TEL (phone number) + processTypeValue('tel', ['voice']) + + # EMAIL + processTypeValue('email', ['internet'], ['internet']) + + # MAILER + processSingleString('mailer') + + # TZ (timezone) + processSingleString('tz') + + # GEO (geographical information) + elmGeo = self.getPropertyValue(elmCard, 'geo') + if elmGeo: + sLatitude = self.getPropertyValue(elmGeo, 'latitude', self.STRING, 0, 1) + sLongitude = self.getPropertyValue(elmGeo, 'longitude', self.STRING, 0, 1) + arLines.append(self.vcardFold('GEO:' + sLatitude + ';' + sLongitude)) + + # TITLE + processSingleString('title') + + # ROLE + processSingleString('role') + + # LOGO + processSingleURI('logo') + + # ORG (organization) + elmOrg = self.getPropertyValue(elmCard, 'org') + if elmOrg: + sOrganizationName = self.getPropertyValue(elmOrg, 'organization-name', self.STRING, 0, 1) + if not sOrganizationName: + # implied "organization-name" optimization + # http://microformats.org/wiki/hcard#Implied_.22organization-name.22_Optimization + sOrganizationName = self.getPropertyValue(elmCard, 'org', self.STRING, 0, 1) + if sOrganizationName: + arLines.append(self.vcardFold('ORG:' + sOrganizationName)) + else: + arOrganizationUnit = self.getPropertyValue(elmOrg, 'organization-unit', self.STRING, 1, 1) + arLines.append(self.vcardFold('ORG:' + sOrganizationName + ';' + ';'.join(arOrganizationUnit))) + + # CATEGORY + arCategory = self.getPropertyValue(elmCard, 'category', self.STRING, 1, 1) + self.getPropertyValue(elmCard, 'categories', self.STRING, 1, 1) + if arCategory: + arLines.append(self.vcardFold('CATEGORIES:' + ','.join(arCategory))) + + # NOTE + processSingleString('note') + + # REV + processSingleString('rev') + + # SOUND + processSingleURI('sound') + + # UID + processSingleString('uid') + + # URL + processSingleURI('url') + + # CLASS + processSingleString('class') + + # KEY + processSingleURI('key') + + if arLines: + arLines = [u'BEGIN:vCard',u'VERSION:3.0'] + arLines + [u'END:vCard'] + sVCards += u'\n'.join(arLines) + u'\n' + + return sVCards.strip() + + def isProbablyDownloadable(self, elm): + attrsD = elm.attrMap + if not attrsD.has_key('href'): return 0 + linktype = attrsD.get('type', '').strip() + if linktype.startswith('audio/') or \ + linktype.startswith('video/') or \ + (linktype.startswith('application/') and not linktype.endswith('xml')): + return 1 + path = urlparse.urlparse(attrsD['href'])[2] + if path.find('.') == -1: return 0 + fileext = path.split('.').pop().lower() + return fileext in self.known_binary_extensions + + def findTags(self): + all = lambda x: 1 + for elm in self.document(all, {'rel': re.compile(r'\btag\b')}): + href = elm.get('href') + if not href: continue + urlscheme, domain, path, params, query, fragment = \ + urlparse.urlparse(_urljoin(self.baseuri, href)) + segments = path.split('/') + tag = segments.pop() + if not tag: + tag = segments.pop() + tagscheme = urlparse.urlunparse((urlscheme, domain, '/'.join(segments), '', '', '')) + if not tagscheme.endswith('/'): + tagscheme += '/' + self.tags.append(FeedParserDict({"term": tag, "scheme": tagscheme, "label": elm.string or ''})) + + def findEnclosures(self): + all = lambda x: 1 + enclosure_match = re.compile(r'\benclosure\b') + for elm in self.document(all, {'href': re.compile(r'.+')}): + if not enclosure_match.search(elm.get('rel', '')) and not self.isProbablyDownloadable(elm): continue + if elm.attrMap not in self.enclosures: + self.enclosures.append(elm.attrMap) + if elm.string and not elm.get('title'): + self.enclosures[-1]['title'] = elm.string + + def findXFN(self): + all = lambda x: 1 + for elm in self.document(all, {'rel': re.compile('.+'), 'href': re.compile('.+')}): + rels = elm.get('rel', '').split() + xfn_rels = [] + for rel in rels: + if rel in self.known_xfn_relationships: + xfn_rels.append(rel) + if xfn_rels: + self.xfn.append({"relationships": xfn_rels, "href": elm.get('href', ''), "name": elm.string}) + +def _parseMicroformats(htmlSource, baseURI, encoding): + if not BeautifulSoup: return + if _debug: sys.stderr.write('entering _parseMicroformats\n') + try: + p = _MicroformatsParser(htmlSource, baseURI, encoding) + except UnicodeEncodeError: + # sgmllib throws this exception when performing lookups of tags + # with non-ASCII characters in them. + return + p.vcard = p.findVCards(p.document) + p.findTags() + p.findEnclosures() + p.findXFN() + return {"tags": p.tags, "enclosures": p.enclosures, "xfn": p.xfn, "vcard": p.vcard} + +class _RelativeURIResolver(_BaseHTMLProcessor): + relative_uris = [('a', 'href'), + ('applet', 'codebase'), + ('area', 'href'), + ('blockquote', 'cite'), + ('body', 'background'), + ('del', 'cite'), + ('form', 'action'), + ('frame', 'longdesc'), + ('frame', 'src'), + ('iframe', 'longdesc'), + ('iframe', 'src'), + ('head', 'profile'), + ('img', 'longdesc'), + ('img', 'src'), + ('img', 'usemap'), + ('input', 'src'), + ('input', 'usemap'), + ('ins', 'cite'), + ('link', 'href'), + ('object', 'classid'), + ('object', 'codebase'), + ('object', 'data'), + ('object', 'usemap'), + ('q', 'cite'), + ('script', 'src')] + + def __init__(self, baseuri, encoding, _type): + _BaseHTMLProcessor.__init__(self, encoding, _type) + self.baseuri = baseuri + + def resolveURI(self, uri): + return _makeSafeAbsoluteURI(_urljoin(self.baseuri, uri.strip())) + + def unknown_starttag(self, tag, attrs): + if _debug: + sys.stderr.write('tag: [%s] with attributes: [%s]\n' % (tag, str(attrs))) + attrs = self.normalize_attrs(attrs) + attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + +def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type): + if _debug: + sys.stderr.write('entering _resolveRelativeURIs\n') + + p = _RelativeURIResolver(baseURI, encoding, _type) + p.feed(htmlSource) + return p.output() + +def _makeSafeAbsoluteURI(base, rel=None): + # bail if ACCEPTABLE_URI_SCHEMES is empty + if not ACCEPTABLE_URI_SCHEMES: + return _urljoin(base, rel or u'') + if not base: + return rel or u'' + if not rel: + scheme = urlparse.urlparse(base)[0] + if not scheme or scheme in ACCEPTABLE_URI_SCHEMES: + return base + return u'' + uri = _urljoin(base, rel) + if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES: + return u'' + return uri + +class _HTMLSanitizer(_BaseHTMLProcessor): + acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', + 'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button', + 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', + 'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn', + 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset', + 'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1', + 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins', + 'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter', + 'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option', + 'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select', + 'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong', + 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot', + 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript'] + + acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis', + 'background', 'balance', 'bgcolor', 'bgproperties', 'border', + 'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding', + 'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff', + 'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols', + 'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data', + 'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay', + 'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for', + 'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus', + 'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode', + 'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc', + 'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max', + 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref', + 'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size', + 'prompt', 'pqg', 'radiogroup', 'readonly', 'rel', 'repeat-max', + 'repeat-min', 'replace', 'required', 'rev', 'rightspacing', 'rows', + 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', 'src', + 'start', 'step', 'summary', 'suppress', 'tabindex', 'target', 'template', + 'title', 'toppadding', 'type', 'unselectable', 'usemap', 'urn', 'valign', + 'value', 'variable', 'volume', 'vspace', 'vrml', 'width', 'wrap', + 'xml:lang'] + + unacceptable_elements_with_end_tag = ['script', 'applet', 'style'] + + acceptable_css_properties = ['azimuth', 'background-color', + 'border-bottom-color', 'border-collapse', 'border-color', + 'border-left-color', 'border-right-color', 'border-top-color', 'clear', + 'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font', + 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', + 'height', 'letter-spacing', 'line-height', 'overflow', 'pause', + 'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness', + 'speak', 'speak-header', 'speak-numeral', 'speak-punctuation', + 'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent', + 'unicode-bidi', 'vertical-align', 'voice-family', 'volume', + 'white-space', 'width'] + + # survey of common keywords found in feeds + acceptable_css_keywords = ['auto', 'aqua', 'black', 'block', 'blue', + 'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed', + 'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left', + 'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive', + 'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top', + 'transparent', 'underline', 'white', 'yellow'] + + valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' + + '\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$') + + mathml_elements = ['annotation', 'annotation-xml', 'maction', 'math', + 'merror', 'mfenced', 'mfrac', 'mi', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', + 'mphantom', 'mprescripts', 'mroot', 'mrow', 'mspace', 'msqrt', 'mstyle', + 'msub', 'msubsup', 'msup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', + 'munderover', 'none', 'semantics'] + + mathml_attributes = ['actiontype', 'align', 'columnalign', 'columnalign', + 'columnalign', 'close', 'columnlines', 'columnspacing', 'columnspan', 'depth', + 'display', 'displaystyle', 'encoding', 'equalcolumns', 'equalrows', + 'fence', 'fontstyle', 'fontweight', 'frame', 'height', 'linethickness', + 'lspace', 'mathbackground', 'mathcolor', 'mathvariant', 'mathvariant', + 'maxsize', 'minsize', 'open', 'other', 'rowalign', 'rowalign', 'rowalign', + 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'scriptlevel', 'selection', + 'separator', 'separators', 'stretchy', 'width', 'width', 'xlink:href', + 'xlink:show', 'xlink:type', 'xmlns', 'xmlns:xlink'] + + # svgtiny - foreignObject + linearGradient + radialGradient + stop + svg_elements = ['a', 'animate', 'animateColor', 'animateMotion', + 'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject', + 'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern', + 'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath', + 'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop', + 'svg', 'switch', 'text', 'title', 'tspan', 'use'] + + # svgtiny + class + opacity + offset + xmlns + xmlns:xlink + svg_attributes = ['accent-height', 'accumulate', 'additive', 'alphabetic', + 'arabic-form', 'ascent', 'attributeName', 'attributeType', + 'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height', + 'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx', + 'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity', + 'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style', + 'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2', + 'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x', + 'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines', + 'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid', + 'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max', + 'min', 'name', 'offset', 'opacity', 'orient', 'origin', + 'overline-position', 'overline-thickness', 'panose-1', 'path', + 'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY', + 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', + 'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv', + 'stop-color', 'stop-opacity', 'strikethrough-position', + 'strikethrough-thickness', 'stroke', 'stroke-dasharray', + 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', + 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage', + 'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2', + 'underline-position', 'underline-thickness', 'unicode', 'unicode-range', + 'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width', + 'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole', + 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', + 'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1', + 'y2', 'zoomAndPan'] + + svg_attr_map = None + svg_elem_map = None + + acceptable_svg_properties = [ 'fill', 'fill-opacity', 'fill-rule', + 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin', + 'stroke-opacity'] + + def reset(self): + _BaseHTMLProcessor.reset(self) + self.unacceptablestack = 0 + self.mathmlOK = 0 + self.svgOK = 0 + + def unknown_starttag(self, tag, attrs): + acceptable_attributes = self.acceptable_attributes + keymap = {} + if not tag in self.acceptable_elements or self.svgOK: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack += 1 + + # add implicit namespaces to html5 inline svg/mathml + if self._type.endswith('html'): + if not dict(attrs).get('xmlns'): + if tag=='svg': + attrs.append( ('xmlns','http://www.w3.org/2000/svg') ) + if tag=='math': + attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') ) + + # not otherwise acceptable, perhaps it is MathML or SVG? + if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs: + self.mathmlOK += 1 + if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs: + self.svgOK += 1 + + # chose acceptable attributes based on tag class, else bail + if self.mathmlOK and tag in self.mathml_elements: + acceptable_attributes = self.mathml_attributes + elif self.svgOK and tag in self.svg_elements: + # for most vocabularies, lowercasing is a good idea. Many + # svg elements, however, are camel case + if not self.svg_attr_map: + lower=[attr.lower() for attr in self.svg_attributes] + mix=[a for a in self.svg_attributes if a not in lower] + self.svg_attributes = lower + self.svg_attr_map = dict([(a.lower(),a) for a in mix]) + + lower=[attr.lower() for attr in self.svg_elements] + mix=[a for a in self.svg_elements if a not in lower] + self.svg_elements = lower + self.svg_elem_map = dict([(a.lower(),a) for a in mix]) + acceptable_attributes = self.svg_attributes + tag = self.svg_elem_map.get(tag,tag) + keymap = self.svg_attr_map + elif not tag in self.acceptable_elements: + return + + # declare xlink namespace, if needed + if self.mathmlOK or self.svgOK: + if filter(lambda (n,v): n.startswith('xlink:'),attrs): + if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs: + attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink')) + + clean_attrs = [] + for key, value in self.normalize_attrs(attrs): + if key in acceptable_attributes: + key=keymap.get(key,key) + # make sure the uri uses an acceptable uri scheme + if key == u'href': + value = _makeSafeAbsoluteURI(value) + clean_attrs.append((key,value)) + elif key=='style': + clean_value = self.sanitize_style(value) + if clean_value: clean_attrs.append((key,clean_value)) + _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs) + + def unknown_endtag(self, tag): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack -= 1 + if self.mathmlOK and tag in self.mathml_elements: + if tag == 'math' and self.mathmlOK: self.mathmlOK -= 1 + elif self.svgOK and tag in self.svg_elements: + tag = self.svg_elem_map.get(tag,tag) + if tag == 'svg' and self.svgOK: self.svgOK -= 1 + else: + return + _BaseHTMLProcessor.unknown_endtag(self, tag) + + def handle_pi(self, text): + pass + + def handle_decl(self, text): + pass + + def handle_data(self, text): + if not self.unacceptablestack: + _BaseHTMLProcessor.handle_data(self, text) + + def sanitize_style(self, style): + # disallow urls + style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style) + + # gauntlet + if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): return '' + # This replaced a regexp that used re.match and was prone to pathological back-tracking. + if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip(): return '' + + clean = [] + for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style): + if not value: continue + if prop.lower() in self.acceptable_css_properties: + clean.append(prop + ': ' + value + ';') + elif prop.split('-')[0].lower() in ['background','border','margin','padding']: + for keyword in value.split(): + if not keyword in self.acceptable_css_keywords and \ + not self.valid_css_values.match(keyword): + break + else: + clean.append(prop + ': ' + value + ';') + elif self.svgOK and prop.lower() in self.acceptable_svg_properties: + clean.append(prop + ': ' + value + ';') + + return ' '.join(clean) + + def parse_comment(self, i, report=1): + ret = _BaseHTMLProcessor.parse_comment(self, i, report) + if ret >= 0: + return ret + # if ret == -1, this may be a malicious attempt to circumvent + # sanitization, or a page-destroying unclosed comment + match = re.compile(r'--[^>]*>').search(self.rawdata, i+4) + if match: + return match.end() + # unclosed comment; deliberately fail to handle_data() + return len(self.rawdata) + + +def _sanitizeHTML(htmlSource, encoding, _type): + p = _HTMLSanitizer(encoding, _type) + htmlSource = htmlSource.replace('<![CDATA[', '<![CDATA[') + p.feed(htmlSource) + data = p.output() + if TIDY_MARKUP: + # loop through list of preferred Tidy interfaces looking for one that's installed, + # then set up a common _tidy function to wrap the interface-specific API. + _tidy = None + for tidy_interface in PREFERRED_TIDY_INTERFACES: + try: + if tidy_interface == "uTidy": + from tidy import parseString as _utidy + def _tidy(data, **kwargs): + return str(_utidy(data, **kwargs)) + break + elif tidy_interface == "mxTidy": + from mx.Tidy import Tidy as _mxtidy + def _tidy(data, **kwargs): + nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) + return data + break + except: + pass + if _tidy: + utf8 = type(data) == type(u'') + if utf8: + data = data.encode('utf-8') + data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") + if utf8: + data = unicode(data, 'utf-8') + if data.count('<body'): + data = data.split('<body', 1)[1] + if data.count('>'): + data = data.split('>', 1)[1] + if data.count('</body'): + data = data.split('</body', 1)[0] + data = data.strip().replace('\r\n', '\n') + return data + +class _FeedURLHandler(urllib2.HTTPDigestAuthHandler, urllib2.HTTPRedirectHandler, urllib2.HTTPDefaultErrorHandler): + def http_error_default(self, req, fp, code, msg, headers): + if ((code / 100) == 3) and (code != 304): + return self.http_error_302(req, fp, code, msg, headers) + infourl = urllib.addinfourl(fp, headers, req.get_full_url()) + infourl.status = code + return infourl + + def http_error_302(self, req, fp, code, msg, headers): + if headers.dict.has_key('location'): + infourl = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) + else: + infourl = urllib.addinfourl(fp, headers, req.get_full_url()) + if not hasattr(infourl, 'status'): + infourl.status = code + return infourl + + def http_error_301(self, req, fp, code, msg, headers): + if headers.dict.has_key('location'): + infourl = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers) + else: + infourl = urllib.addinfourl(fp, headers, req.get_full_url()) + if not hasattr(infourl, 'status'): + infourl.status = code + return infourl + + http_error_300 = http_error_302 + http_error_303 = http_error_302 + http_error_307 = http_error_302 + + def http_error_401(self, req, fp, code, msg, headers): + # Check if + # - server requires digest auth, AND + # - we tried (unsuccessfully) with basic auth, AND + # - we're using Python 2.3.3 or later (digest auth is irreparably broken in earlier versions) + # If all conditions hold, parse authentication information + # out of the Authorization header we sent the first time + # (for the username and password) and the WWW-Authenticate + # header the server sent back (for the realm) and retry + # the request with the appropriate digest auth headers instead. + # This evil genius hack has been brought to you by Aaron Swartz. + host = urlparse.urlparse(req.get_full_url())[1] + try: + assert sys.version.split()[0] >= '2.3.3' + assert base64 != None + user, passw = _base64decode(req.headers['Authorization'].split(' ')[1]).split(':') + realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] + self.add_password(realm, host, user, passw) + retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) + self.reset_retry_count() + return retry + except: + return self.http_error_default(req, fp, code, msg, headers) + +def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers): + """URL, filename, or string --> stream + + This function lets you define parsers that take any input source + (URL, pathname to local or network file, or actual data as a string) + and deal with it in a uniform manner. Returned object is guaranteed + to have all the basic stdio read methods (read, readline, readlines). + Just .close() the object when you're done with it. + + If the etag argument is supplied, it will be used as the value of an + If-None-Match request header. + + If the modified argument is supplied, it can be a tuple of 9 integers + (as returned by gmtime() in the standard Python time module) or a date + string in any format supported by feedparser. Regardless, it MUST + be in GMT (Greenwich Mean Time). It will be reformatted into an + RFC 1123-compliant date and used as the value of an If-Modified-Since + request header. + + If the agent argument is supplied, it will be used as the value of a + User-Agent request header. + + If the referrer argument is supplied, it will be used as the value of a + Referer[sic] request header. + + If handlers is supplied, it is a list of handlers used to build a + urllib2 opener. + + if request_headers is supplied it is a dictionary of HTTP request headers + that will override the values generated by FeedParser. + """ + + if hasattr(url_file_stream_or_string, 'read'): + return url_file_stream_or_string + + if url_file_stream_or_string == '-': + return sys.stdin + + if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'): + # Deal with the feed URI scheme + if url_file_stream_or_string.startswith('feed:http'): + url_file_stream_or_string = url_file_stream_or_string[5:] + elif url_file_stream_or_string.startswith('feed:'): + url_file_stream_or_string = 'http:' + url_file_stream_or_string[5:] + if not agent: + agent = USER_AGENT + # test for inline user:password for basic auth + auth = None + if base64: + urltype, rest = urllib.splittype(url_file_stream_or_string) + realhost, rest = urllib.splithost(rest) + if realhost: + user_passwd, realhost = urllib.splituser(realhost) + if user_passwd: + url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) + auth = base64.standard_b64encode(user_passwd).strip() + + # iri support + try: + if isinstance(url_file_stream_or_string,unicode): + url_file_stream_or_string = url_file_stream_or_string.encode('idna').decode('utf-8') + else: + url_file_stream_or_string = url_file_stream_or_string.decode('utf-8').encode('idna').decode('utf-8') + except: + pass + + # try to open with urllib2 (to use optional headers) + request = _build_urllib2_request(url_file_stream_or_string, agent, etag, modified, referrer, auth, request_headers) + opener = apply(urllib2.build_opener, tuple(handlers + [_FeedURLHandler()])) + opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent + try: + return opener.open(request) + finally: + opener.close() # JohnD + + # try to open with native open function (if url_file_stream_or_string is a filename) + try: + return open(url_file_stream_or_string, 'rb') + except: + pass + + # treat url_file_stream_or_string as string + return _StringIO(str(url_file_stream_or_string)) + +def _build_urllib2_request(url, agent, etag, modified, referrer, auth, request_headers): + request = urllib2.Request(url) + request.add_header('User-Agent', agent) + if etag: + request.add_header('If-None-Match', etag) + if type(modified) == type(''): + modified = _parse_date(modified) + elif isinstance(modified, datetime.datetime): + modified = modified.utctimetuple() + if modified: + # format into an RFC 1123-compliant timestamp. We can't use + # time.strftime() since the %a and %b directives can be affected + # by the current locale, but RFC 2616 states that dates must be + # in English. + short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) + if referrer: + request.add_header('Referer', referrer) + if gzip and zlib: + request.add_header('Accept-encoding', 'gzip, deflate') + elif gzip: + request.add_header('Accept-encoding', 'gzip') + elif zlib: + request.add_header('Accept-encoding', 'deflate') + else: + request.add_header('Accept-encoding', '') + if auth: + request.add_header('Authorization', 'Basic %s' % auth) + if ACCEPT_HEADER: + request.add_header('Accept', ACCEPT_HEADER) + # use this for whatever -- cookies, special headers, etc + # [('Cookie','Something'),('x-special-header','Another Value')] + for header_name, header_value in request_headers.items(): + request.add_header(header_name, header_value) + request.add_header('A-IM', 'feed') # RFC 3229 support + return request + +_date_handlers = [] +def registerDateHandler(func): + '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' + _date_handlers.insert(0, func) + +# ISO-8601 date parsing routines written by Fazal Majid. +# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 +# parser is beyond the scope of feedparser and would be a worthwhile addition +# to the Python library. +# A single regular expression cannot parse ISO 8601 date formats into groups +# as the standard is highly irregular (for instance is 030104 2003-01-04 or +# 0301-04-01), so we use templates instead. +# Please note the order in templates is significant because we need a +# greedy match. +_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO', + 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', + '-YY-?MM', '-OOO', '-YY', + '--MM-?DD', '--MM', + '---DD', + 'CC', ''] +_iso8601_re = [ + tmpl.replace( + 'YYYY', r'(?P<year>\d{4})').replace( + 'YY', r'(?P<year>\d\d)').replace( + 'MM', r'(?P<month>[01]\d)').replace( + 'DD', r'(?P<day>[0123]\d)').replace( + 'OOO', r'(?P<ordinal>[0123]\d\d)').replace( + 'CC', r'(?P<century>\d\d$)') + + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})' + + r'(:(?P<second>\d{2}))?' + + r'(\.(?P<fracsecond>\d+))?' + + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?' + for tmpl in _iso8601_tmpl] +try: + del tmpl +except NameError: + pass +_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] +try: + del regex +except NameError: + pass +def _parse_date_iso8601(dateString): + '''Parse a variety of ISO-8601-compatible formats like 20040105''' + m = None + for _iso8601_match in _iso8601_matches: + m = _iso8601_match(dateString) + if m: break + if not m: return + if m.span() == (0, 0): return + params = m.groupdict() + ordinal = params.get('ordinal', 0) + if ordinal: + ordinal = int(ordinal) + else: + ordinal = 0 + year = params.get('year', '--') + if not year or year == '--': + year = time.gmtime()[0] + elif len(year) == 2: + # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 + year = 100 * int(time.gmtime()[0] / 100) + int(year) + else: + year = int(year) + month = params.get('month', '-') + if not month or month == '-': + # ordinals are NOT normalized by mktime, we simulate them + # by setting month=1, day=ordinal + if ordinal: + month = 1 + else: + month = time.gmtime()[1] + month = int(month) + day = params.get('day', 0) + if not day: + # see above + if ordinal: + day = ordinal + elif params.get('century', 0) or \ + params.get('year', 0) or params.get('month', 0): + day = 1 + else: + day = time.gmtime()[2] + else: + day = int(day) + # special case of the century - is the first year of the 21st century + # 2000 or 2001 ? The debate goes on... + if 'century' in params.keys(): + year = (int(params['century']) - 1) * 100 + 1 + # in ISO 8601 most fields are optional + for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: + if not params.get(field, None): + params[field] = 0 + hour = int(params.get('hour', 0)) + minute = int(params.get('minute', 0)) + second = int(float(params.get('second', 0))) + # weekday is normalized by mktime(), we can ignore it + weekday = 0 + daylight_savings_flag = -1 + tm = [year, month, day, hour, minute, second, weekday, + ordinal, daylight_savings_flag] + # ISO 8601 time zone adjustments + tz = params.get('tz') + if tz and tz != 'Z': + if tz[0] == '-': + tm[3] += int(params.get('tzhour', 0)) + tm[4] += int(params.get('tzmin', 0)) + elif tz[0] == '+': + tm[3] -= int(params.get('tzhour', 0)) + tm[4] -= int(params.get('tzmin', 0)) + else: + return None + # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) + # which is guaranteed to normalize d/m/y/h/m/s. + # Many implementations have bugs, but we'll pretend they don't. + return time.localtime(time.mktime(tuple(tm))) +registerDateHandler(_parse_date_iso8601) + +# 8-bit date handling routines written by ytrewq1. +_korean_year = u'\ub144' # b3e2 in euc-kr +_korean_month = u'\uc6d4' # bff9 in euc-kr +_korean_day = u'\uc77c' # c0cf in euc-kr +_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr +_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr + +_korean_onblog_date_re = \ + re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ + (_korean_year, _korean_month, _korean_day)) +_korean_nate_date_re = \ + re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ + (_korean_am, _korean_pm)) +def _parse_date_onblog(dateString): + '''Parse a string according to the OnBlog 8-bit date format''' + m = _korean_onblog_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_onblog) + +def _parse_date_nate(dateString): + '''Parse a string according to the Nate 8-bit date format''' + m = _korean_nate_date_re.match(dateString) + if not m: return + hour = int(m.group(5)) + ampm = m.group(4) + if (ampm == _korean_pm): + hour += 12 + hour = str(hour) + if len(hour) == 1: + hour = '0' + hour + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_nate) + +_mssql_date_re = \ + re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') +def _parse_date_mssql(dateString): + '''Parse a string according to the MS SQL date format''' + m = _mssql_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_mssql) + +# Unicode strings for Greek date strings +_greek_months = \ + { \ + u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 + u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 + u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 + u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 + u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 + u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 + u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 + u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 + u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 + u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 + u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 + u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 + u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 + u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 + u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 + u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 + u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 + } + +_greek_wdays = \ + { \ + u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 + u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 + u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 + u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 + u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 + u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 + u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 + } + +_greek_date_format_re = \ + re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') + +def _parse_date_greek(dateString): + '''Parse a string according to a Greek 8-bit date format.''' + m = _greek_date_format_re.match(dateString) + if not m: return + try: + wday = _greek_wdays[m.group(1)] + month = _greek_months[m.group(3)] + except: + return + rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ + {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ + 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': m.group(8)} + if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) + return _parse_date_rfc822(rfc822date) +registerDateHandler(_parse_date_greek) + +# Unicode strings for Hungarian date strings +_hungarian_months = \ + { \ + u'janu\u00e1r': u'01', # e1 in iso-8859-2 + u'febru\u00e1ri': u'02', # e1 in iso-8859-2 + u'm\u00e1rcius': u'03', # e1 in iso-8859-2 + u'\u00e1prilis': u'04', # e1 in iso-8859-2 + u'm\u00e1ujus': u'05', # e1 in iso-8859-2 + u'j\u00fanius': u'06', # fa in iso-8859-2 + u'j\u00falius': u'07', # fa in iso-8859-2 + u'augusztus': u'08', + u'szeptember': u'09', + u'okt\u00f3ber': u'10', # f3 in iso-8859-2 + u'november': u'11', + u'december': u'12', + } + +_hungarian_date_format_re = \ + re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') + +def _parse_date_hungarian(dateString): + '''Parse a string according to a Hungarian 8-bit date format.''' + m = _hungarian_date_format_re.match(dateString) + if not m: return + try: + month = _hungarian_months[m.group(2)] + day = m.group(3) + if len(day) == 1: + day = '0' + day + hour = m.group(4) + if len(hour) == 1: + hour = '0' + hour + except: + return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ + {'year': m.group(1), 'month': month, 'day': day,\ + 'hour': hour, 'minute': m.group(5),\ + 'zonediff': m.group(6)} + if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_hungarian) + +# W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by +# Drake and licensed under the Python license. Removed all range checking +# for month, day, hour, minute, and second, since mktime will normalize +# these later +def _parse_date_w3dtf(dateString): + def __extract_date(m): + year = int(m.group('year')) + if year < 100: + year = 100 * int(time.gmtime()[0] / 100) + int(year) + if year < 1000: + return 0, 0, 0 + julian = m.group('julian') + if julian: + julian = int(julian) + month = julian / 30 + 1 + day = julian % 30 + 1 + jday = None + while jday != julian: + t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) + jday = time.gmtime(t)[-2] + diff = abs(jday - julian) + if jday > julian: + if diff < day: + day = day - diff + else: + month = month - 1 + day = 31 + elif jday < julian: + if day + diff < 28: + day = day + diff + else: + month = month + 1 + return year, month, day + month = m.group('month') + day = 1 + if month is None: + month = 1 + else: + month = int(month) + day = m.group('day') + if day: + day = int(day) + else: + day = 1 + return year, month, day + + def __extract_time(m): + if not m: + return 0, 0, 0 + hours = m.group('hours') + if not hours: + return 0, 0, 0 + hours = int(hours) + minutes = int(m.group('minutes')) + seconds = m.group('seconds') + if seconds: + seconds = int(seconds) + else: + seconds = 0 + return hours, minutes, seconds + + def __extract_tzd(m): + '''Return the Time Zone Designator as an offset in seconds from UTC.''' + if not m: + return 0 + tzd = m.group('tzd') + if not tzd: + return 0 + if tzd == 'Z': + return 0 + hours = int(m.group('tzdhours')) + minutes = m.group('tzdminutes') + if minutes: + minutes = int(minutes) + else: + minutes = 0 + offset = (hours*60 + minutes) * 60 + if tzd[0] == '+': + return -offset + return offset + + __date_re = ('(?P<year>\d\d\d\d)' + '(?:(?P<dsep>-|)' + '(?:(?P<month>\d\d)(?:(?P=dsep)(?P<day>\d\d))?' + '|(?P<julian>\d\d\d)))?') + __tzd_re = '(?P<tzd>[-+](?P<tzdhours>\d\d)(?::?(?P<tzdminutes>\d\d))|Z)' + __tzd_rx = re.compile(__tzd_re) + __time_re = ('(?P<hours>\d\d)(?P<tsep>:|)(?P<minutes>\d\d)' + '(?:(?P=tsep)(?P<seconds>\d\d)(?:[.,]\d+)?)?' + + __tzd_re) + __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) + __datetime_rx = re.compile(__datetime_re) + m = __datetime_rx.match(dateString) + if (m is None) or (m.group() != dateString): return + gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) + if gmt[0] == 0: return + return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) +registerDateHandler(_parse_date_w3dtf) + +def _parse_date_rfc822(dateString): + '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' + data = dateString.split() + if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: + del data[0] + if len(data) == 4: + s = data[3] + i = s.find('+') + if i > 0: + data[3:] = [s[:i], s[i+1:]] + else: + data.append('') + dateString = " ".join(data) + # Account for the Etc/GMT timezone by stripping 'Etc/' + elif len(data) == 5 and data[4].lower().startswith('etc/'): + data[4] = data[4][4:] + dateString = " ".join(data) + if len(data) < 5: + dateString += ' 00:00:00 GMT' + tm = rfc822.parsedate_tz(dateString) + if tm: + return time.gmtime(rfc822.mktime_tz(tm)) +# rfc822.py defines several time zones, but we define some extra ones. +# 'ET' is equivalent to 'EST', etc. +_additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} +rfc822._timezones.update(_additional_timezones) +registerDateHandler(_parse_date_rfc822) + +def _parse_date_perforce(aDateString): + """parse a date in yyyy/mm/dd hh:mm:ss TTT format""" + # Fri, 2006/09/15 08:19:53 EDT + _my_date_pattern = re.compile( \ + r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})') + + dow, year, month, day, hour, minute, second, tz = \ + _my_date_pattern.search(aDateString).groups() + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz) + tm = rfc822.parsedate_tz(dateString) + if tm: + return time.gmtime(rfc822.mktime_tz(tm)) +registerDateHandler(_parse_date_perforce) + +def _parse_date(dateString): + '''Parses a variety of date formats into a 9-tuple in GMT''' + for handler in _date_handlers: + try: + date9tuple = handler(dateString) + if not date9tuple: continue + if len(date9tuple) != 9: + if _debug: sys.stderr.write('date handler function must return 9-tuple\n') + raise ValueError + map(int, date9tuple) + return date9tuple + except Exception, e: + if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) + pass + return None + +def _getCharacterEncoding(http_headers, xml_data): + '''Get the character encoding of the XML document + + http_headers is a dictionary + xml_data is a raw string (not Unicode) + + This is so much trickier than it sounds, it's not even funny. + According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type + is application/xml, application/*+xml, + application/xml-external-parsed-entity, or application/xml-dtd, + the encoding given in the charset parameter of the HTTP Content-Type + takes precedence over the encoding given in the XML prefix within the + document, and defaults to 'utf-8' if neither are specified. But, if + the HTTP Content-Type is text/xml, text/*+xml, or + text/xml-external-parsed-entity, the encoding given in the XML prefix + within the document is ALWAYS IGNORED and only the encoding given in + the charset parameter of the HTTP Content-Type header should be + respected, and it defaults to 'us-ascii' if not specified. + + Furthermore, discussion on the atom-syntax mailing list with the + author of RFC 3023 leads me to the conclusion that any document + served with a Content-Type of text/* and no charset parameter + must be treated as us-ascii. (We now do this.) And also that it + must always be flagged as non-well-formed. (We now do this too.) + + If Content-Type is unspecified (input was local file or non-HTTP source) + or unrecognized (server just got it totally wrong), then go by the + encoding given in the XML prefix of the document and default to + 'iso-8859-1' as per the HTTP specification (RFC 2616). + + Then, assuming we didn't find a character encoding in the HTTP headers + (and the HTTP Content-type allowed us to look in the body), we need + to sniff the first few bytes of the XML data and try to determine + whether the encoding is ASCII-compatible. Section F of the XML + specification shows the way here: + http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + + If the sniffed encoding is not ASCII-compatible, we need to make it + ASCII compatible so that we can sniff further into the XML declaration + to find the encoding attribute, which will tell us the true encoding. + + Of course, none of this guarantees that we will be able to parse the + feed in the declared character encoding (assuming it was declared + correctly, which many are not). CJKCodecs and iconv_codec help a lot; + you should definitely install them if you can. + http://cjkpython.i18n.org/ + ''' + + def _parseHTTPContentType(content_type): + '''takes HTTP Content-Type header and returns (content type, charset) + + If no charset is specified, returns (content type, '') + If no content type is specified, returns ('', '') + Both return parameters are guaranteed to be lowercase strings + ''' + content_type = content_type or '' + content_type, params = cgi.parse_header(content_type) + return content_type, params.get('charset', '').replace("'", '') + + sniffed_xml_encoding = '' + xml_encoding = '' + true_encoding = '' + http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type', http_headers.get('Content-type'))) + # Must sniff for non-ASCII-compatible character encodings before + # searching for XML declaration. This heuristic is defined in + # section F of the XML specification: + # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + try: + if xml_data[:4] == _l2bytes([0x4c, 0x6f, 0xa7, 0x94]): + # EBCDIC + xml_data = _ebcdic_to_ascii(xml_data) + elif xml_data[:4] == _l2bytes([0x00, 0x3c, 0x00, 0x3f]): + # UTF-16BE + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == _l2bytes([0xfe, 0xff])) and (xml_data[2:4] != _l2bytes([0x00, 0x00])): + # UTF-16BE with BOM + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') + elif xml_data[:4] == _l2bytes([0x3c, 0x00, 0x3f, 0x00]): + # UTF-16LE + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == _l2bytes([0xff, 0xfe])) and (xml_data[2:4] != _l2bytes([0x00, 0x00])): + # UTF-16LE with BOM + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') + elif xml_data[:4] == _l2bytes([0x00, 0x00, 0x00, 0x3c]): + # UTF-32BE + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') + elif xml_data[:4] == _l2bytes([0x3c, 0x00, 0x00, 0x00]): + # UTF-32LE + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') + elif xml_data[:4] == _l2bytes([0x00, 0x00, 0xfe, 0xff]): + # UTF-32BE with BOM + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') + elif xml_data[:4] == _l2bytes([0xff, 0xfe, 0x00, 0x00]): + # UTF-32LE with BOM + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') + elif xml_data[:3] == _l2bytes([0xef, 0xbb, 0xbf]): + # UTF-8 with BOM + sniffed_xml_encoding = 'utf-8' + xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') + else: + # ASCII-compatible + pass + xml_encoding_match = re.compile(_s2bytes('^<\?.*encoding=[\'"](.*?)[\'"].*\?>')).match(xml_data) + except: + xml_encoding_match = None + if xml_encoding_match: + xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower() + if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): + xml_encoding = sniffed_xml_encoding + acceptable_content_type = 0 + application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') + text_content_types = ('text/xml', 'text/xml-external-parsed-entity') + if (http_content_type in application_content_types) or \ + (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): + acceptable_content_type = 1 + true_encoding = http_encoding or xml_encoding or 'utf-8' + elif (http_content_type in text_content_types) or \ + (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): + acceptable_content_type = 1 + true_encoding = http_encoding or 'us-ascii' + elif http_content_type.startswith('text/'): + true_encoding = http_encoding or 'us-ascii' + elif http_headers and (not (http_headers.has_key('content-type') or http_headers.has_key('Content-type'))): + true_encoding = xml_encoding or 'iso-8859-1' + else: + true_encoding = xml_encoding or 'utf-8' + # some feeds claim to be gb2312 but are actually gb18030. + # apparently MSIE and Firefox both do the following switch: + if true_encoding.lower() == 'gb2312': + true_encoding = 'gb18030' + return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type + +def _toUTF8(data, encoding): + '''Changes an XML data stream on the fly to specify a new encoding + + data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already + encoding is a string recognized by encodings.aliases + ''' + if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) + # strip Byte Order Mark (if present) + if (len(data) >= 4) and (data[:2] == _l2bytes([0xfe, 0xff])) and (data[2:4] != _l2bytes([0x00, 0x00])): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16be': + sys.stderr.write('trying utf-16be instead\n') + encoding = 'utf-16be' + data = data[2:] + elif (len(data) >= 4) and (data[:2] == _l2bytes([0xff, 0xfe])) and (data[2:4] != _l2bytes([0x00, 0x00])): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16le': + sys.stderr.write('trying utf-16le instead\n') + encoding = 'utf-16le' + data = data[2:] + elif data[:3] == _l2bytes([0xef, 0xbb, 0xbf]): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-8': + sys.stderr.write('trying utf-8 instead\n') + encoding = 'utf-8' + data = data[3:] + elif data[:4] == _l2bytes([0x00, 0x00, 0xfe, 0xff]): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32be': + sys.stderr.write('trying utf-32be instead\n') + encoding = 'utf-32be' + data = data[4:] + elif data[:4] == _l2bytes([0xff, 0xfe, 0x00, 0x00]): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32le': + sys.stderr.write('trying utf-32le instead\n') + encoding = 'utf-32le' + data = data[4:] + newdata = unicode(data, encoding) + if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) + declmatch = re.compile('^<\?xml[^>]*?>') + newdecl = '''<?xml version='1.0' encoding='utf-8'?>''' + if declmatch.search(newdata): + newdata = declmatch.sub(newdecl, newdata) + else: + newdata = newdecl + u'\n' + newdata + return newdata.encode('utf-8') + +def _stripDoctype(data): + '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) + + rss_version may be 'rss091n' or None + stripped_data is the same XML document, minus the DOCTYPE + ''' + start = re.search(_s2bytes('<\w'), data) + start = start and start.start() or -1 + head,data = data[:start+1], data[start+1:] + + entity_pattern = re.compile(_s2bytes(r'^\s*<!ENTITY([^>]*?)>'), re.MULTILINE) + entity_results=entity_pattern.findall(head) + head = entity_pattern.sub(_s2bytes(''), head) + doctype_pattern = re.compile(_s2bytes(r'^\s*<!DOCTYPE([^>]*?)>'), re.MULTILINE) + doctype_results = doctype_pattern.findall(head) + doctype = doctype_results and doctype_results[0] or _s2bytes('') + if doctype.lower().count(_s2bytes('netscape')): + version = 'rss091n' + else: + version = None + + # only allow in 'safe' inline entity definitions + replacement=_s2bytes('') + if len(doctype_results)==1 and entity_results: + safe_pattern=re.compile(_s2bytes('\s+(\w+)\s+"(&#\w+;|[^&"]*)"')) + safe_entities=filter(lambda e: safe_pattern.match(e),entity_results) + if safe_entities: + replacement=_s2bytes('<!DOCTYPE feed [\n <!ENTITY') + _s2bytes('>\n <!ENTITY ').join(safe_entities) + _s2bytes('>\n]>') + data = doctype_pattern.sub(replacement, head) + data + + return version, data, dict(replacement and [(k.decode('utf-8'), v.decode('utf-8')) for k, v in safe_pattern.findall(replacement)]) + +def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[], request_headers={}, response_headers={}): + '''Parse a feed from a URL, file, stream, or string. + + request_headers, if given, is a dict from http header name to value to add + to the request; this overrides internally generated values. + ''' + result = FeedParserDict() + result['feed'] = FeedParserDict() + result['entries'] = [] + if _XML_AVAILABLE: + result['bozo'] = 0 + if not isinstance(handlers, list): + handlers = [handlers] + try: + f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers) + data = f.read() + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = None + f = None + + if hasattr(f, 'headers'): + result['headers'] = dict(f.headers) + # overwrite existing headers using response_headers + if 'headers' in result: + result['headers'].update(response_headers) + elif response_headers: + result['headers'] = copy.deepcopy(response_headers) + + # if feed is gzip-compressed, decompress it + if f and data and 'headers' in result: + if gzip and result['headers'].get('content-encoding') == 'gzip': + try: + data = gzip.GzipFile(fileobj=_StringIO(data)).read() + except Exception, e: + # Some feeds claim to be gzipped but they're not, so + # we get garbage. Ideally, we should re-request the + # feed without the 'Accept-encoding: gzip' header, + # but we don't. + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + elif zlib and result['headers'].get('content-encoding') == 'deflate': + try: + data = zlib.decompress(data, -zlib.MAX_WBITS) + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + + # save HTTP headers + if 'headers' in result: + if 'etag' in result['headers'] or 'ETag' in result['headers']: + etag = result['headers'].get('etag', result['headers'].get('ETag')) + if etag: + result['etag'] = etag + if 'last-modified' in result['headers'] or 'Last-Modified' in result['headers']: + modified = result['headers'].get('last-modified', result['headers'].get('Last-Modified')) + if modified: + result['modified'] = _parse_date(modified) + if hasattr(f, 'url'): + result['href'] = f.url + result['status'] = 200 + if hasattr(f, 'status'): + result['status'] = f.status + if hasattr(f, 'close'): + f.close() + + # there are four encodings to keep track of: + # - http_encoding is the encoding declared in the Content-Type HTTP header + # - xml_encoding is the encoding declared in the <?xml declaration + # - sniffed_encoding is the encoding sniffed from the first 4 bytes of the XML data + # - result['encoding'] is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications + http_headers = result.get('headers', {}) + result['encoding'], http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type = \ + _getCharacterEncoding(http_headers, data) + if http_headers and (not acceptable_content_type): + if http_headers.has_key('content-type') or http_headers.has_key('Content-type'): + bozo_message = '%s is not an XML media type' % http_headers.get('content-type', http_headers.get('Content-type')) + else: + bozo_message = 'no Content-type specified' + result['bozo'] = 1 + result['bozo_exception'] = NonXMLContentType(bozo_message) + + if data is not None: + result['version'], data, entities = _stripDoctype(data) + + # ensure that baseuri is an absolute uri using an acceptable URI scheme + contentloc = http_headers.get('content-location', http_headers.get('Content-Location', '')) + href = result.get('href', '') + baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href + + baselang = http_headers.get('content-language', http_headers.get('Content-Language', None)) + + # if server sent 304, we're done + if result.get('status', 0) == 304: + result['version'] = '' + result['debug_message'] = 'The feed has not changed since you last checked, ' + \ + 'so the server sent no data. This is a feature, not a bug!' + return result + + # if there was a problem downloading, we're done + if data is None: + return result + + # determine character encoding + use_strict_parser = 0 + known_encoding = 0 + tried_encodings = [] + # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM + for proposed_encoding in (result['encoding'], xml_encoding, sniffed_xml_encoding): + if not proposed_encoding: continue + if proposed_encoding in tried_encodings: continue + tried_encodings.append(proposed_encoding) + try: + data = _toUTF8(data, proposed_encoding) + known_encoding = use_strict_parser = 1 + break + except: + pass + # if no luck and we have auto-detection library, try that + if (not known_encoding) and chardet: + try: + proposed_encoding = chardet.detect(data)['encoding'] + if proposed_encoding and (proposed_encoding not in tried_encodings): + tried_encodings.append(proposed_encoding) + data = _toUTF8(data, proposed_encoding) + known_encoding = use_strict_parser = 1 + except: + pass + # if still no luck and we haven't tried utf-8 yet, try that + if (not known_encoding) and ('utf-8' not in tried_encodings): + try: + proposed_encoding = 'utf-8' + tried_encodings.append(proposed_encoding) + data = _toUTF8(data, proposed_encoding) + known_encoding = use_strict_parser = 1 + except: + pass + # if still no luck and we haven't tried windows-1252 yet, try that + if (not known_encoding) and ('windows-1252' not in tried_encodings): + try: + proposed_encoding = 'windows-1252' + tried_encodings.append(proposed_encoding) + data = _toUTF8(data, proposed_encoding) + known_encoding = use_strict_parser = 1 + except: + pass + # if still no luck and we haven't tried iso-8859-2 yet, try that. + if (not known_encoding) and ('iso-8859-2' not in tried_encodings): + try: + proposed_encoding = 'iso-8859-2' + tried_encodings.append(proposed_encoding) + data = _toUTF8(data, proposed_encoding) + known_encoding = use_strict_parser = 1 + except: + pass + # if still no luck, give up + if not known_encoding: + result['bozo'] = 1 + result['bozo_exception'] = CharacterEncodingUnknown( \ + 'document encoding unknown, I tried ' + \ + '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' % \ + (result['encoding'], xml_encoding)) + result['encoding'] = '' + elif proposed_encoding != result['encoding']: + result['bozo'] = 1 + result['bozo_exception'] = CharacterEncodingOverride( \ + 'document declared as %s, but parsed as %s' % \ + (result['encoding'], proposed_encoding)) + result['encoding'] = proposed_encoding + + if not _XML_AVAILABLE: + use_strict_parser = 0 + if use_strict_parser: + # initialize the SAX parser + feedparser = _StrictFeedParser(baseuri, baselang, 'utf-8') + saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS) + saxparser.setFeature(xml.sax.handler.feature_namespaces, 1) + saxparser.setContentHandler(feedparser) + saxparser.setErrorHandler(feedparser) + source = xml.sax.xmlreader.InputSource() + source.setByteStream(_StringIO(data)) + if hasattr(saxparser, '_ns_stack'): + # work around bug in built-in SAX parser (doesn't recognize xml: namespace) + # PyXML doesn't have this problem, and it doesn't have _ns_stack either + saxparser._ns_stack.append({'http://www.w3.org/XML/1998/namespace':'xml'}) + try: + saxparser.parse(source) + except Exception, e: + if _debug: + import traceback + traceback.print_stack() + traceback.print_exc() + sys.stderr.write('xml parsing failed\n') + result['bozo'] = 1 + result['bozo_exception'] = feedparser.exc or e + use_strict_parser = 0 + if not use_strict_parser: + feedparser = _LooseFeedParser(baseuri, baselang, 'utf-8', entities) + feedparser.feed(data.decode('utf-8', 'replace')) + result['feed'] = feedparser.feeddata + result['entries'] = feedparser.entries + result['version'] = result['version'] or feedparser.version + result['namespaces'] = feedparser.namespacesInUse + return result + +class Serializer: + def __init__(self, results): + self.results = results + +class TextSerializer(Serializer): + def write(self, stream=sys.stdout): + self._writer(stream, self.results, '') + + def _writer(self, stream, node, prefix): + if not node: return + if hasattr(node, 'keys'): + keys = node.keys() + keys.sort() + for k in keys: + if k in ('description', 'link'): continue + if node.has_key(k + '_detail'): continue + if node.has_key(k + '_parsed'): continue + self._writer(stream, node[k], prefix + k + '.') + elif type(node) == types.ListType: + index = 0 + for n in node: + self._writer(stream, n, prefix[:-1] + '[' + str(index) + '].') + index += 1 + else: + try: + s = str(node).encode('utf-8') + s = s.replace('\\', '\\\\') + s = s.replace('\r', '') + s = s.replace('\n', r'\n') + stream.write(prefix[:-1]) + stream.write('=') + stream.write(s) + stream.write('\n') + except: + pass + +class PprintSerializer(Serializer): + def write(self, stream=sys.stdout): + if self.results.has_key('href'): + stream.write(self.results['href'] + '\n\n') + from pprint import pprint + pprint(self.results, stream) + stream.write('\n') + +if __name__ == '__main__': + try: + from optparse import OptionParser + except: + OptionParser = None + + if OptionParser: + optionParser = OptionParser(version=__version__, usage="%prog [options] url_or_filename_or_-") + optionParser.set_defaults(format="pprint") + optionParser.add_option("-A", "--user-agent", dest="agent", metavar="AGENT", help="User-Agent for HTTP URLs") + optionParser.add_option("-e", "--referer", "--referrer", dest="referrer", metavar="URL", help="Referrer for HTTP URLs") + optionParser.add_option("-t", "--etag", dest="etag", metavar="TAG", help="ETag/If-None-Match for HTTP URLs") + optionParser.add_option("-m", "--last-modified", dest="modified", metavar="DATE", help="Last-modified/If-Modified-Since for HTTP URLs (any supported date format)") + optionParser.add_option("-f", "--format", dest="format", metavar="FORMAT", help="output results in FORMAT (text, pprint)") + optionParser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="write debugging information to stderr") + (options, urls) = optionParser.parse_args() + if options.verbose: + _debug = 1 + if not urls: + optionParser.print_help() + sys.exit(0) + else: + if not sys.argv[1:]: + print __doc__ + sys.exit(0) + class _Options: + etag = modified = agent = referrer = None + format = 'pprint' + options = _Options() + urls = sys.argv[1:] + + zopeCompatibilityHack() + + serializer = globals().get(options.format.capitalize() + 'Serializer', Serializer) + for url in urls: + results = parse(url, etag=options.etag, modified=options.modified, agent=options.agent, referrer=options.referrer) + serializer(results).write(sys.stdout) diff --git a/feedparser.pyc b/feedparser.pyc Binary files differnew file mode 100644 index 0000000..21864f7 --- /dev/null +++ b/feedparser.pyc diff --git a/generic_cover.png b/generic_cover.png Binary files differnew file mode 100644 index 0000000..33eec4f --- /dev/null +++ b/generic_cover.png diff --git a/get-books.cfg b/get-books.cfg new file mode 100644 index 0000000..127d9ea --- /dev/null +++ b/get-books.cfg @@ -0,0 +1,34 @@ +[GetBooks] +show_images = yes +languages = en,es,fr,de + +[Feedbooks] +name = Feedbooks +query_uri = http://www.feedbooks.com/books/search.atom?query= +opds_cover = http://opds-spec.org/image +summary_field = summary +blacklist = Erotica,Romance + +[Catalogs_Feedbooks] +Science Fiction = http://www.feedbooks.com/books/top.atom?category=FBFIC028000&range=week +Short stories = http://www.feedbooks.com/books/top?category=FBFIC029000&range=week +Fairy Tales, Folk Tales & Mythology = http://www.feedbooks.com/books/top?category=FBFIC010000&range=week +Juvenile = http://www.feedbooks.com/books/top?category=FBJUV000000&range=week +Action & Adventure = http://www.feedbooks.com/books/top?category=FBFIC002000&range=week +Public Domain Books = http://www.feedbooks.com/publicdomain/catalog.atom +#Feed Books Catalog Index = http://www.feedbooks.com/catalog + +[Internet Archive] +name = Internet Archive +query_uri = http://bookserver.archive.org/catalog/opensearch?q= +opds_cover = http://opds-spec.org/image +#opds_cover = http://opds-spec.org/image/thumbnail + +[Ceibal] +name = Ceibal +query_uri = http://biblioteca.ceibal.edu.uy/latest.atom?q= +opds_cover = http://opds-spec.org/cover +summary_field = summary + +[Catalogs_Ceibal] +indice = http://biblioteca.ceibal.edu.uy/static_media/catalogo_inicial.htm diff --git a/icons/books.svg b/icons/books.svg new file mode 100644 index 0000000..f7a04ce --- /dev/null +++ b/icons/books.svg @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ + <!ENTITY fill_color "#AAAAAA"> + <!ENTITY stroke_color "#FFFFFF"> +]> +<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55"> + <g + transform="translate(0,-997.36218)" + id="layer1"> + <g + transform="translate(-0.57504564,-1.02237)" + id="g5130"> + <path + d="m 10.265977,1016.4311 32.174926,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -32.174926,0 z" + id="path5116" + style="fill:&fill_color;;fill-opacity:1;stroke:none" /> + <path + d="m 8.9529503,1016.4311 33.4879527,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -33.4879527,0" + id="rect4601" + style="fill:none;stroke:&stroke_color;;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + transform="matrix(-1,0,0,1,55.575046,14.38453)" + id="g5134"> + <path + d="m 10.265977,1016.4311 32.174926,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -32.174926,0 z" + id="path5136" + style="fill:&fill_color;;fill-opacity:1;stroke:none" /> + <path + d="m 8.9529503,1016.4311 33.4879527,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -33.4879527,0" + id="path5138" + style="fill:none;stroke:&stroke_color;;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + transform="matrix(-1,0,0,1,52.607946,29.79143)" + id="g5140"> + <path + d="m 10.265977,1016.4311 32.174926,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -32.174926,0 z" + id="path5142" + style="fill:&fill_color;;fill-opacity:1;stroke:none" /> + <path + d="m 8.9529503,1016.4311 33.4879527,0 c 3.030554,-5.2317 1.641363,-8.6218 0,-11.9069 l -33.4879527,0" + id="path5144" + style="fill:none;stroke:&stroke_color;;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + </g> +</svg> diff --git a/icons/catalogs.svg b/icons/catalogs.svg new file mode 100644 index 0000000..1556b73 --- /dev/null +++ b/icons/catalogs.svg @@ -0,0 +1,93 @@ +<?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" + height="55px" + viewBox="0 0 55 55" + width="55px" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="3.5" + stroke="#000" + fill="#eee" + id="svg3163" + version="1.1" + inkscape:version="0.48.1 r9760" + sodipodi:docname="catalogs.svg"> + <metadata + id="metadata3175"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3173" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1007" + id="namedview3171" + showgrid="false" + inkscape:zoom="5.4363636" + inkscape:cx="-38.53679" + inkscape:cy="27.5" + inkscape:window-x="0" + inkscape:window-y="24" + inkscape:window-maximized="1" + inkscape:current-layer="svg3163" /> + <g + id="g3794" + transform="matrix(0.90045793,0,0,0.88610465,132.19468,25.300159)"> + <path + sodipodi:nodetypes="ccccccccccccccc" + inkscape:connector-curvature="0" + id="rect3177-3-5" + d="m -124.46056,-21.494132 -0.89822,4.756525 -4.26832,-0.537655 -14.89811,9.0304758 22.71871,36.3311012 6.19279,-3.730737 3.96339,2.580136 3.85722,-5.718139 0.81391,0 0,-1.220334 19.250751,-28.6604282 -14.579611,-9.5186088 -4.1322,0.684292 -0.53894,-3.996628 z" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3.93412137;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + <g + transform="translate(-143.84615,-25.384615)" + id="g3789"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect3177-3" + width="15.451505" + height="38.260868" + x="38.378708" + y="-14.139146" + transform="matrix(0.83378586,0.55208798,-0.55208798,0.83378586,0,0)" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect3177" + width="15.451505" + height="38.260868" + x="20.234114" + y="6.438127" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect3177-8" + width="15.451505" + height="38.260868" + x="-7.4373245" + y="16.90127" + transform="matrix(0.85164682,-0.5241161,0.5241161,0.85164682,0,0)" /> + </g> + </g> +</svg> diff --git a/icons/internet-icon.svg b/icons/internet-icon.svg new file mode 100644 index 0000000..c8f466a --- /dev/null +++ b/icons/internet-icon.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ + <!ENTITY stroke_color "#010101"> + <!ENTITY fill_color "#FFFFFF"> +]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-browse"> + <circle cx="27.375" cy="27.5" display="inline" fill="&fill_color;" r="19.903" stroke="&stroke_color;" stroke-width="3.5"/> + <g display="inline"> + <path d="M27.376,7.598c0,0-11.205,8.394-11.205,19.976 c0,11.583,11.205,19.829,11.205,19.829" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/> + <path d="M27.376,7.598c0,0,11.066,9.141,11.066,19.976 c0,10.839-11.066,19.829-11.066,19.829" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/> + <line fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" x1="27.376" x2="27.376" y1="7.598" y2="47.402"/> + <line fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" x1="27.376" x2="27.376" y1="7.598" y2="47.402"/> + <line fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" x1="27.376" x2="27.376" y1="7.598" y2="47.402"/> + <line fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" x1="7.472" x2="47.278" y1="27.5" y2="27.5"/> + </g> +</g></svg> + diff --git a/languagenames.py b/languagenames.py new file mode 100644 index 0000000..88329ce --- /dev/null +++ b/languagenames.py @@ -0,0 +1,53 @@ +#! /usr/bin/env python + +# Copyright (C) 2009 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 + +from xml.etree import ElementTree +import logging + +_ISO_639_XML_PATH = '/usr/share/xml/iso-codes/iso_639.xml' + + +def singleton(object, instantiated=[]): + # From http://norvig.com/python-iaq.html + "Raise an exception if an obj of this class has been instantiated before" + assert object.__class__ not in instantiated, \ + "%s is a Singleton class but is already instantiated" % object.__class__ + instantiated.append(object.__class__) + + +class LanguageNames(object): + + def __init__(self): + singleton(self) + self._cache = None + + def get_full_language_name(self, code): + if self._cache == None: + self._cache = {} + _xmldoc = ElementTree.parse(_ISO_639_XML_PATH) + _eroot = _xmldoc.getroot() + for child in _eroot.getchildren(): + if child.attrib is not None: + lang_name = child.attrib.get('name', None) + lang_code = child.attrib.get('iso_639_1_code', None) + + if lang_code is not None and lang_name is not None: + self._cache[lang_code] = lang_name + _xmldoc = None + + return self._cache[code] diff --git a/languagenames.pyc b/languagenames.pyc Binary files differnew file mode 100644 index 0000000..afd8247 --- /dev/null +++ b/languagenames.pyc diff --git a/listview.py b/listview.py new file mode 100644 index 0000000..8356bfc --- /dev/null +++ b/listview.py @@ -0,0 +1,95 @@ +#! /usr/bin/env python + +# Copyright (C) 2009 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 + +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Pango + +from gettext import gettext as _ +from extListview import ExtListView + + +class ListView(ExtListView): + __txtRdr = Gtk.CellRendererText() + __txtRdr.props.wrap_mode = Pango.WrapMode.WORD + __txtRdr.props.wrap_width = 500 + __txtRdr.props.width = 500 + (ROW_TITLE, ROW_AUTHOR, ROW_PUBLISHER, + ROW_LANGUAGE, ROW_PUB_DATE, ROW_BOOK) = range(6) + + columns = ((_('Title'), [(__txtRdr, GObject.TYPE_STRING)], + (ROW_TITLE,), False, True), + (_('Author'), [(__txtRdr, GObject.TYPE_STRING)], + (ROW_AUTHOR, ROW_TITLE), False, True), + (_('Publisher'), [(__txtRdr, GObject.TYPE_STRING)], + (ROW_AUTHOR, ROW_TITLE), False, False), + (_('Language'), [(__txtRdr, GObject.TYPE_STRING)], + (ROW_AUTHOR, ROW_TITLE), False, False), + (_('Publish Date'), [(__txtRdr, GObject.TYPE_STRING)], + (ROW_AUTHOR, ROW_TITLE), False, False), + (None, [(None, GObject.TYPE_PYOBJECT)], (None,), False, False)) + + __gsignals__ = { + 'selection-changed': (GObject.SignalFlags.RUN_LAST, + None, + ([])), + } + + def __init__(self, lang_code_handler): + ExtListView.__init__(self, self.columns, sortable=True, + useMarkup=False, canShowHideColumns=True) + #self.enableDNDReordering() # Is this needed ? + + self._lang_code_handler = lang_code_handler + + selection = self.get_selection() + selection.set_mode(Gtk.SelectionMode.SINGLE) + selection.connect('changed', self.__selection_changed_cb) + + def __selection_changed_cb(self, selection): + self.emit('selection-changed') + + def populate(self, results): + self.populate_with_books(results.get_book_list()) + + def populate_with_books(self, books): + rows = [] + + for book in books: + lang = '' + try: + lang = self._lang_code_handler.get_full_language_name( + book.get_language()) + except KeyError: + pass + + rows.append([book.get_title(), book.get_author(), + book.get_publisher(), lang, + book.get_published_year(), book]) + + # README: I had to remove the self.clear() here because it + # made the listview to scroll to the top on Gtk3 + + self.insertRows(rows) + + def get_selected_book(self): + try: + ret = self.getFirstSelectedRow()[self.ROW_BOOK] + except IndexError: + ret = None + return ret diff --git a/listview.pyc b/listview.pyc Binary files differnew file mode 100644 index 0000000..90dcdfd --- /dev/null +++ b/listview.pyc diff --git a/locale/af/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/af/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/af/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/af/activity.linfo b/locale/af/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/af/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ak/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ak/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..d71e657 --- /dev/null +++ b/locale/ak/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ak/activity.linfo b/locale/ak/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ak/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/am/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/am/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/am/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/am/activity.linfo b/locale/am/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/am/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ar/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ar/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ar/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ar/activity.linfo b/locale/ar/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ar/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ar_SY/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ar_SY/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..c1ec5b0 --- /dev/null +++ b/locale/ar_SY/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ar_SY/activity.linfo b/locale/ar_SY/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ar_SY/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ay/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ay/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ay/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ay/activity.linfo b/locale/ay/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ay/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/bg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/bg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/bg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/bg/activity.linfo b/locale/bg/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/bg/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/bi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/bi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/bi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/bi/activity.linfo b/locale/bi/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/bi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/bn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/bn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/bn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/bn/activity.linfo b/locale/bn/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/bn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/bn_IN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/bn_IN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/bn_IN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/bn_IN/activity.linfo b/locale/bn_IN/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/bn_IN/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/bs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/bs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/bs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/bs/activity.linfo b/locale/bs/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/bs/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ca/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ca/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ca/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ca/activity.linfo b/locale/ca/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ca/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/cpp/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/cpp/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/cpp/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/cpp/activity.linfo b/locale/cpp/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/cpp/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/cs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/cs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/cs/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/cs/activity.linfo b/locale/cs/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/cs/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/da/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/da/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..d71e657 --- /dev/null +++ b/locale/da/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/da/activity.linfo b/locale/da/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/da/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/de/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/de/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..ad46f16 --- /dev/null +++ b/locale/de/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/de/activity.linfo b/locale/de/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/de/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/dz/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/dz/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/dz/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/dz/activity.linfo b/locale/dz/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/dz/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/el/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/el/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..ea3ec4b --- /dev/null +++ b/locale/el/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/el/activity.linfo b/locale/el/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/el/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/en/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/en/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..954481b --- /dev/null +++ b/locale/en/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/en/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/en_GB/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/en_GB/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..38ac23c --- /dev/null +++ b/locale/en_GB/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/en_GB/activity.linfo b/locale/en_GB/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/en_GB/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/en_US/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/en_US/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..69e2589 --- /dev/null +++ b/locale/en_US/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/en_US/activity.linfo b/locale/en_US/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/en_US/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/es/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/es/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..cc713c0 --- /dev/null +++ b/locale/es/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/es/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/fa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/fa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/fa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/fa/activity.linfo b/locale/fa/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/fa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/fa_AF/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/fa_AF/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/fa_AF/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/fa_AF/activity.linfo b/locale/fa_AF/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/fa_AF/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ff/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ff/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ff/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ff/activity.linfo b/locale/ff/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ff/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/fi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/fi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/fi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/fi/activity.linfo b/locale/fi/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/fi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/fil/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/fil/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/fil/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/fil/activity.linfo b/locale/fil/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/fil/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/fr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/fr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..d9ea5af --- /dev/null +++ b/locale/fr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/fr/activity.linfo b/locale/fr/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/fr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/gu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/gu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/gu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/gu/activity.linfo b/locale/gu/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/gu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ha/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ha/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ha/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ha/activity.linfo b/locale/ha/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ha/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/he/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/he/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/he/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/he/activity.linfo b/locale/he/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/he/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/hi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/hi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/hi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/hi/activity.linfo b/locale/hi/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/hi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ht/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ht/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ht/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ht/activity.linfo b/locale/ht/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ht/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/hu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/hu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..4c13728 --- /dev/null +++ b/locale/hu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/hu/activity.linfo b/locale/hu/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/hu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/hy/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/hy/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..6ee9126 --- /dev/null +++ b/locale/hy/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/hy/activity.linfo b/locale/hy/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/hy/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/id/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/id/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..024f834 --- /dev/null +++ b/locale/id/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/id/activity.linfo b/locale/id/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/id/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ig/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ig/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ig/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ig/activity.linfo b/locale/ig/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ig/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/is/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/is/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/is/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/is/activity.linfo b/locale/is/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/is/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/it/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/it/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..0959550 --- /dev/null +++ b/locale/it/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/it/activity.linfo b/locale/it/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/it/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ja/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ja/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ja/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ja/activity.linfo b/locale/ja/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ja/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/km/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/km/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/km/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/km/activity.linfo b/locale/km/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/km/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/kn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/kn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/kn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/kn/activity.linfo b/locale/kn/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/kn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ko/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ko/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ko/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ko/activity.linfo b/locale/ko/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ko/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/kos/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/kos/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/kos/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/kos/activity.linfo b/locale/kos/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/kos/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ku/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ku/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..b912322 --- /dev/null +++ b/locale/ku/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ku/activity.linfo b/locale/ku/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ku/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/lt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/lt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..d71e657 --- /dev/null +++ b/locale/lt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/lt/activity.linfo b/locale/lt/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/lt/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/lv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/lv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/lv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/lv/activity.linfo b/locale/lv/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/lv/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/mg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/mg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/mg/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/mg/activity.linfo b/locale/mg/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/mg/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/mk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/mk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/mk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/mk/activity.linfo b/locale/mk/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/mk/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ml/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ml/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ml/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ml/activity.linfo b/locale/ml/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ml/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/mn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/mn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/mn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/mn/activity.linfo b/locale/mn/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/mn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/mr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/mr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/mr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/mr/activity.linfo b/locale/mr/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/mr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ms/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ms/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ms/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ms/activity.linfo b/locale/ms/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ms/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/mvo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/mvo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/mvo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/mvo/activity.linfo b/locale/mvo/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/mvo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/na/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/na/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/na/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/na/activity.linfo b/locale/na/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/na/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/nah/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/nah/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..b912322 --- /dev/null +++ b/locale/nah/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/nah/activity.linfo b/locale/nah/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/nah/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/nb/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/nb/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/nb/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/nb/activity.linfo b/locale/nb/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/nb/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ne/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ne/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..8a942bd --- /dev/null +++ b/locale/ne/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ne/activity.linfo b/locale/ne/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ne/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/nl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/nl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1c1e2a8 --- /dev/null +++ b/locale/nl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/nl/activity.linfo b/locale/nl/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/nl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/nn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/nn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/nn/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/nn/activity.linfo b/locale/nn/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/nn/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/pa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pa/activity.linfo b/locale/pa/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pap/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pap/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/pap/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pap/activity.linfo b/locale/pap/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pap/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pis/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pis/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/pis/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pis/activity.linfo b/locale/pis/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pis/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/pl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pl/activity.linfo b/locale/pl/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ps/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ps/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..160207d --- /dev/null +++ b/locale/ps/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ps/activity.linfo b/locale/ps/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ps/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/pt/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pt/activity.linfo b/locale/pt/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pt/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/pt_BR/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/pt_BR/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..73ac284 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/pt_BR/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/qu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/qu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/qu/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/qu/activity.linfo b/locale/qu/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/qu/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ro/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ro/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ro/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ro/activity.linfo b/locale/ro/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ro/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ru/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ru/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ru/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ru/activity.linfo b/locale/ru/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ru/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/rw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/rw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/rw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/rw/activity.linfo b/locale/rw/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/rw/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sd/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sd/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/sd/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sd/activity.linfo b/locale/sd/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sd/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/si/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/si/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/si/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/si/activity.linfo b/locale/si/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/si/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/sk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sk/activity.linfo b/locale/sk/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sk/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/sl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sl/activity.linfo b/locale/sl/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..3ce9fed --- /dev/null +++ b/locale/sm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sm/activity.linfo b/locale/sm/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sm/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sq/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sq/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..f0da807 --- /dev/null +++ b/locale/sq/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sq/activity.linfo b/locale/sq/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sq/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/sr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sr/activity.linfo b/locale/sr/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/st/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/st/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/st/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/st/activity.linfo b/locale/st/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/st/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/sv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sv/activity.linfo b/locale/sv/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sv/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/sw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/sw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/sw/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/sw/activity.linfo b/locale/sw/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/sw/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ta/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ta/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1cd060d --- /dev/null +++ b/locale/ta/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ta/activity.linfo b/locale/ta/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ta/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/te/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/te/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/te/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/te/activity.linfo b/locale/te/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/te/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/templates/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/templates/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..024f834 --- /dev/null +++ b/locale/templates/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/templates/activity.linfo b/locale/templates/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/templates/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/th/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/th/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/th/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/th/activity.linfo b/locale/th/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/th/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ton/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ton/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/ton/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ton/activity.linfo b/locale/ton/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ton/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tpi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tpi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/tpi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tpi/activity.linfo b/locale/tpi/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tpi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/tr/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tr/activity.linfo b/locale/tr/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tr/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tvl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tvl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/tvl/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tvl/activity.linfo b/locale/tvl/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tvl/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tyv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tyv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..d71e657 --- /dev/null +++ b/locale/tyv/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tyv/activity.linfo b/locale/tyv/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tyv/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tzm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tzm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..b912322 --- /dev/null +++ b/locale/tzm/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tzm/activity.linfo b/locale/tzm/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tzm/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/tzo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/tzo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/tzo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/tzo/activity.linfo b/locale/tzo/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/tzo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ug/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ug/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ug/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ug/activity.linfo b/locale/ug/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ug/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/uk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/uk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/uk/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/uk/activity.linfo b/locale/uk/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/uk/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/ur/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/ur/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/ur/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/ur/activity.linfo b/locale/ur/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/ur/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/vi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/vi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..218fabc --- /dev/null +++ b/locale/vi/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/vi/activity.linfo b/locale/vi/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/vi/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/wa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/wa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/wa/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/wa/activity.linfo b/locale/wa/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/wa/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/yo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/yo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/yo/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/yo/activity.linfo b/locale/yo/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/yo/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/zh_CN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/zh_CN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..9b8cd9b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/zh_CN/activity.linfo b/locale/zh_CN/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/zh_CN/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/zh_HK/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/zh_HK/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..1d51c96 --- /dev/null +++ b/locale/zh_HK/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/zh_HK/activity.linfo b/locale/zh_HK/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/zh_HK/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/locale/zh_TW/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo b/locale/zh_TW/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo Binary files differnew file mode 100644 index 0000000..5aeb588 --- /dev/null +++ b/locale/zh_TW/LC_MESSAGES/uy.ceibal.GetBooksCeibalActivity.mo diff --git a/locale/zh_TW/activity.linfo b/locale/zh_TW/activity.linfo new file mode 100644 index 0000000..621795b --- /dev/null +++ b/locale/zh_TW/activity.linfo @@ -0,0 +1,2 @@ +[Activity] +name = EBook Reader diff --git a/musica.svg b/musica.svg new file mode 100644 index 0000000..b921d4f --- /dev/null +++ b/musica.svg @@ -0,0 +1,7 @@ +<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ + <!ENTITY stroke_color "#010101"> + <!ENTITY fill_color "#FFFFFF"> +]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-jukebox"> + <path d="M17.666,7.884v32.841 c-2.587-0.614-7.914-0.612-10.755,1.764c-5.688,4.76-0.695,10.109,5.815,7.456c3.705-1.512,4.94-3.937,4.94-7.597V25.997 l30.952-3.516v12.974c-4.212-0.615-7.915-0.614-10.758,1.764c-5.688,4.76-0.695,10.109,5.815,7.454 c3.705-1.51,4.942-3.936,4.942-7.596V4.293L17.666,7.884z M48.618,15.86l-30.952,4.029l0-5.225l30.953-4.102V15.86z" display="inline" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/> +</g></svg> + @@ -0,0 +1,602 @@ +#! /usr/bin/env python + +# Copyright (C) 2009 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 + +from gi.repository import GObject +from gi.repository import Gtk + +from sugar3 import network + +import logging +import threading +import os +import urllib +import time +import csv + +import sys +sys.path.insert(0, './') +import feedparser + +_logger = logging.getLogger('get-ia-books-activity') + +_REL_OPDS_ACQUISTION = u'http://opds-spec.org/acquisition' +_REL_SUBSECTION = 'subsection' +_REL_OPDS_POPULAR = u'http://opds-spec.org/sort/popular' +_REL_OPDS_NEW = u'http://opds-spec.org/sort/new' +_REL_ALTERNATE = 'alternate' +_REL_CRAWLABLE = 'http://opds-spec.org/crawlable' + +GObject.threads_init() + + +class ReadURLDownloader(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: + length = self._info.headers.get('Content-Length') + if length is not None: + return int(length) + else: + return 0 + + 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 + + +class DownloadThread(threading.Thread): + + def __init__(self, obj, midway): + threading.Thread.__init__(self) + self.midway = midway + self.obj = obj + self.stopthread = threading.Event() + + def _download(self): + + def entry_type(entry): + for link in entry['links']: + if link['rel'] in \ + [_REL_OPDS_POPULAR, _REL_OPDS_NEW, _REL_SUBSECTION]: + return "CATALOG" + else: + return 'BOOK' + + logging.debug('feedparser version %s', feedparser.__version__) + if not self.obj.is_local() and self.midway == False: + uri = self.obj._uri + self.obj._queryterm.replace(' ', '+') + headers = {} + if self.obj._language is not None and self.obj._language != 'all': + headers['Accept-Language'] = self.obj._language + uri = uri + '&lang=' + self.obj._language + logging.error('Searching URL %s headers %s' % (uri, headers)) + feedobj = feedparser.parse(uri, request_headers=headers) + else: + feedobj = feedparser.parse(self.obj._uri) + + # Get catalog Type + CATALOG_TYPE = 'COMMON' + if 'links' in feedobj['feed']: + for link in feedobj['feed']['links']: + if link['rel'] == _REL_CRAWLABLE: + CATALOG_TYPE = 'CRAWLABLE' + break + + for entry in feedobj['entries']: + if entry_type(entry) == 'BOOK' and CATALOG_TYPE is not 'CRAWLABLE': + self.obj._booklist.append(Book(self.obj._configuration, entry)) + elif entry_type(entry) == 'CATALOG' or CATALOG_TYPE == 'CRAWLABLE': + self.obj._cataloglist.append( \ + Book(self.obj._configuration, entry)) + + self.obj._feedobj = feedobj + self.obj._ready = True + GObject.idle_add(self.obj.notify_updated, self.midway) + return False + + def run(self): + self._download() + + def stop(self): + self.stopthread.set() + + +class Book(object): + + def __init__(self, configuration, entry, basepath=None): + self._entry = entry + self._basepath = basepath + self._configuration = configuration + + def get_title(self): + try: + ret = self._entry['title'] + except KeyError: + ret = 'Unknown' + + return ret + + def get_author(self): + try: + ret = self._entry['author'] + except KeyError: + ret = 'Unknown' + + return ret + + def get_download_links(self): + ret = {} + for link in self._entry['links']: + if link['rel'] == _REL_OPDS_ACQUISTION: + if self._basepath is not None and \ + not (link['href'].startswith('http') or \ + link['href'].startswith('ftp')): + ret[link['type']] = 'file://' \ + + os.path.join(self._basepath, link['href']) + else: + ret[link['type']] = link['href'] + elif link['rel'] in \ + [_REL_OPDS_POPULAR, _REL_OPDS_NEW, _REL_SUBSECTION]: + ret[link['type']] = link['href'] + elif link['rel'] == _REL_ALTERNATE: + ret[link['type']] = link['href'] + else: + pass + return ret + + def get_publisher(self): + try: + ret = self._entry['dcterms_publisher'] + except KeyError: + ret = 'Unknown' + + return ret + + def get_published_year(self): + try: + ret = self._entry['published'] + except KeyError: + ret = 'Unknown' + + return ret + + def get_language(self): + try: + ret = self._entry['dcterms_language'] + except KeyError: + ret = 'Unknown' + + return ret + + def get_image_url(self): + try: + ret = {} + for link in self._entry['links']: + if link['rel'] == self._configuration['opds_cover']: + if self._basepath is not None and \ + not (link['href'].startswith('http') or \ + link['href'].startswith('ftp')): + ret[link['type']] = 'file://' \ + + os.path.join(self._basepath, link['href']) + else: + ret[link['type']] = link['href'] + except KeyError: + ret = 'Unknown' + return ret + + def get_summary(self): + if self._configuration is not None \ + and 'summary_field' in self._configuration: + try: + ret = self._entry[self._configuration['summary_field']] + except KeyError: + ret = 'Unknown' + else: + ret = 'Unknown' + return ret + + def get_object_id(self): + try: + ret = self._entry['object_id'] + except KeyError: + ret = 'Unknown' + + return ret + + def match(self, terms): + #TODO: Make this more comprehensive + for term in terms.split('+'): + if term in self.get_title(): + return True + if term in self.get_author(): + return True + if term in self.get_publisher(): + return True + return False + + +class QueryResult(GObject.GObject): + + __gsignals__ = { + 'updated': (GObject.SignalFlags.RUN_FIRST, + None, + ([bool])), + } + + def __init__(self, configuration, queryterm, language): + GObject.GObject.__init__(self) + self._configuration = configuration + self._uri = self._configuration['query_uri'] + self._queryterm = queryterm + self._language = language + self._feedobj = None + self._next_uri = '' + self._ready = False + self._booklist = [] + self._cataloglist = [] + self.threads = [] + self._start_download() + + def _start_download(self, midway=False): + d_thread = DownloadThread(self, midway) + self.threads.append(d_thread) + d_thread.start() + + def notify_updated(self, midway): + self.emit('updated', midway) + + def __len__(self): + return len(self._booklist) + + def has_next(self): + ''' + Returns True if more result pages are + available for the resultset + ''' + if not 'links' in self._feedobj['feed']: + return False + for link in self._feedobj['feed']['links']: + if link['rel'] == u'next': + self._next_uri = link['href'] + return True + + return False + + def update_with_next(self): + ''' + Updates the booklist with the next resultset + ''' + if len(self._next_uri) > 0: + self._ready = False + self._uri = self._next_uri + self.cancel() # XXX: Is this needed ? + self._start_download(midway=True) + + def cancel(self): + ''' + Cancels the query job + ''' + for d_thread in self.threads: + d_thread.stop() + + def get_book_n(self, n): + ''' + Gets the n-th book + ''' + return self._booklist[n] + + def get_book_list(self): + ''' + Gets the entire booklist + ''' + return self._booklist + + def get_catalog_list(self): + ''' + Gets the entire catalog list + ''' + return self._cataloglist + + def is_ready(self): + ''' + Returns False if a query is in progress + ''' + return self._ready + + def is_local(self): + ''' + Returns True in case of a local school + server or a local device + (yay! for sneakernet) + ''' + return False + + +class LocalVolumeQueryResult(QueryResult): + + def __init__(self, path, queryterm, language): + configuration = {'query_uri': os.path.join(path, 'catalog.xml')} + QueryResult.__init__(self, configuration, queryterm, language) + + def is_local(self): + return True + + def get_book_list(self): + ret = [] + if self._queryterm is None or self._queryterm is '': + for entry in self._feedobj['entries']: + ret.append(Book(entry, basepath=os.path.dirname(self._uri))) + else: + for entry in self._feedobj['entries']: + book = Book(entry, basepath=os.path.dirname(self._uri)) + if book.match(self._queryterm.replace(' ', '+')): + ret.append(book) + return ret + + +class RemoteQueryResult(QueryResult): + + def __init__(self, configuration, queryterm, language): + QueryResult.__init__(self, configuration, queryterm, language) + + +class IABook(Book): + + def __init__(self, configuration, entry, basepath=None): + Book.__init__(self, configuration, entry, basepath=None) + + def get_download_links(self): + return self._entry['links'] + + def get_image_url(self): + return {'jpg': self._entry['cover_image']} + + +class DownloadIAThread(threading.Thread): + + def __init__(self, obj, midway): + threading.Thread.__init__(self) + self.midway = midway + self.obj = obj + self._download_content_length = 0 + self._download_content_type = None + self._booklist = [] + queryterm = self.obj._queryterm + # search_tuple = queryterm.lower().split() + FL = urllib.quote('fl[]') + SORT = urllib.quote('sort[]') + self.search_url = 'http://www.archive.org/advancedsearch.php?q=' + \ + urllib.quote('(title:(' + self.obj._queryterm.lower() + ') OR ' + \ + 'creator:(' + queryterm.lower() + ')) AND format:(DJVU)') + self.search_url += '&' + FL + '=creator&' + FL + '=description&' + \ + FL + '=format&' + FL + '=identifier&' + FL + '=language' + self.search_url += '&' + FL + '=publisher&' + FL + '=title&' + \ + FL + '=volume' + self.search_url += '&' + SORT + '=title&' + SORT + '&' + \ + SORT + '=&rows=500&save=yes&fmt=csv&xmlsearch=Search' + self.stopthread = threading.Event() + + def _download(self): + GObject.idle_add(self.download_csv, self.search_url) + + def download_csv(self, url): + logging.error('get csv from %s', url) + path = os.path.join(self.obj._activity.get_activity_root(), 'instance', + 'tmp%i.csv' % time.time()) + print 'path=', path + getter = ReadURLDownloader(url) + getter.connect("finished", self._get_csv_result_cb) + getter.connect("progress", self._get_csv_progress_cb) + getter.connect("error", self._get_csv_error_cb) + _logger.debug("Starting download to %s...", path) + try: + getter.start(path) + except: + pass + self._download_content_type = getter.get_content_type() + + def _get_csv_progress_cb(self, getter, bytes_downloaded): + if self._download_content_length > 0: + _logger.debug("Downloaded %u of %u bytes...", + bytes_downloaded, self._download_content_length) + else: + _logger.debug("Downloaded %u bytes...", + bytes_downloaded) + + def _get_csv_error_cb(self, getter, err): + _logger.debug("Error getting CSV: %s", err) + self._download_content_length = 0 + self._download_content_type = None + + def _get_csv_result_cb(self, getter, tempfile, suggested_name): + print 'Content type:', self._download_content_type + if self._download_content_type.startswith('text/html'): + # got an error page instead + self._get_csv_error_cb(getter, 'HTTP Error') + return + self.process_downloaded_csv(tempfile, suggested_name) + + def process_downloaded_csv(self, tempfile, suggested_name): + reader = csv.reader(open(tempfile, 'rb')) + reader.next() # skip the first header row. + for row in reader: + if len(row) < 7: + _logger.debug("Server Error: %s", self.search_url) + return + entry = {} + entry['author'] = row[0] + entry['description'] = row[1] + entry['format'] = row[2] + entry['identifier'] = row[3] + entry['dcterms_language'] = row[4] + entry['dcterms_publisher'] = row[5] + entry['title'] = row[6] + volume = row[7] + if volume is not None and len(volume) > 0: + entry['title'] = row[6] + 'Volume ' + volume + + entry['links'] = {} + url_base = 'http://www.archive.org/download/' + \ + row[3] + '/' + row[3] + + if entry['format'].find('DjVu') > -1: + entry['links']['image/x.djvu'] = url_base + '.djvu' + if entry['format'].find('Grayscale LuraTech PDF') > -1: + # Fake mime type + entry['links']['application/pdf-bw'] = url_base + '_bw.pdf' + if entry['format'].find('PDF') > -1: + entry['links']['application/pdf'] = url_base + '_text.pdf' + if entry['format'].find('EPUB') > -1: + entry['links']['application/epub+zip'] = url_base + '.epub' + entry['cover_image'] = 'http://www.archive.org/download/' + \ + row[3] + '/page/cover_thumb.jpg' + + self.obj._booklist.append(IABook(None, entry, '')) + + os.remove(tempfile) + GObject.idle_add(self.obj.notify_updated, self.midway) + self.obj._ready = True + return False + + def run(self): + self._download() + + def stop(self): + self.stopthread.set() + + +class InternetArchiveQueryResult(QueryResult): + + # Search in internet archive does not use OPDS + # because the server implementation is not working very well + + def __init__(self, queryterm, language, activity): + GObject.GObject.__init__(self) + self._activity = activity + self._queryterm = queryterm + self._language = language + self._next_uri = '' + self._ready = False + self._booklist = [] + self._cataloglist = [] + self.threads = [] + self._start_download() + + def notify_updated(self, midway): + self.emit('updated', midway) + + def _start_download(self, midway=False): + d_thread = DownloadIAThread(self, midway) + self.threads.append(d_thread) + d_thread.start() + + +class ImageDownloaderThread(threading.Thread): + + def __init__(self, obj): + threading.Thread.__init__(self) + self.obj = obj + self._getter = ReadURLDownloader(self.obj._url) + self._download_content_length = 0 + self._download_content_type = None + self.stopthread = threading.Event() + + def _download_image(self): + path = os.path.join(self.obj._activity.get_activity_root(), + 'instance', 'tmp%i' % time.time()) + self._getter.connect("finished", self._get_image_result_cb) + self._getter.connect("progress", self._get_image_progress_cb) + self._getter.connect("error", self._get_image_error_cb) + _logger.debug("Starting download to %s...", path) + try: + self._getter.start(path) + except: + _logger.debug("Connection timed out for") + GObject.idle_add(self.obj.notify_updated, None) + + self._download_content_length = \ + self._getter.get_content_length() + self._download_content_type = self._getter.get_content_type() + + def _get_image_result_cb(self, getter, tempfile, suggested_name): + _logger.debug("Got Cover Image %s (%s)", tempfile, suggested_name) + self._getter = None + if not self.stopthread.is_set(): + GObject.idle_add(self.obj.notify_updated, tempfile) + + def _get_image_progress_cb(self, getter, bytes_downloaded): + if self.stopthread.is_set(): + try: + _logger.debug('The download %s was cancelled' % getter._fname) + getter.cancel() + except: + _logger.debug('Got an exception while trying ' + \ + 'to cancel download') + if self._download_content_length > 0: + _logger.debug("Downloaded %u of %u bytes...", bytes_downloaded, + self._download_content_length) + else: + _logger.debug("Downloaded %u bytes...", + bytes_downloaded) + while Gtk.events_pending(): + Gtk.main_iteration() + + def _get_image_error_cb(self, getter, err): + _logger.debug("Error getting image: %s", err) + self._download_content_length = 0 + self._download_content_type = None + self._getter = None + GObject.idle_add(self.obj.notify_updated, None) + + def run(self): + self._download_image() + + def stop(self): + self.stopthread.set() + + +class ImageDownloader(GObject.GObject): + + __gsignals__ = { + 'updated': (GObject.SignalFlags.RUN_FIRST, + None, + ([GObject.TYPE_STRING])), + } + + def __init__(self, activity, url): + GObject.GObject.__init__(self) + self.threads = [] + self._activity = activity + self._url = url + self._start_download() + + def _start_download(self): + d_thread = ImageDownloaderThread(self) + self.threads.append(d_thread) + d_thread.start() + + def notify_updated(self, temp_file): + self.emit('updated', temp_file) + + def stop_download(self): + for thread in self.threads: + thread.stop() diff --git a/opds.pyc b/opds.pyc Binary files differnew file mode 100644 index 0000000..7db3ebc --- /dev/null +++ b/opds.pyc diff --git a/po/GetBooks.pot b/po/GetBooks.pot new file mode 100644 index 0000000..4a2611a --- /dev/null +++ b/po/GetBooks.pot @@ -0,0 +1,146 @@ +# 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: 2011-08-08 10:43-0300\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" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:98 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:260 +msgid "Any language" +msgstr "" + +#: GetIABooksActivity.py:272 GetIABooksActivity.py:394 +#: GetIABooksActivity.py:481 GetIABooksActivity.py:487 +msgid "Catalogs" +msgstr "" + +#: GetIABooksActivity.py:313 GetIABooksActivity.py:777 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:353 +msgid "My books" +msgstr "" + +#: GetIABooksActivity.py:368 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:538 +msgid "Format:" +msgstr "" + +#: GetIABooksActivity.py:551 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:578 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:599 +msgid "Selected book" +msgstr "" + +#: GetIABooksActivity.py:618 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:620 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:624 +msgid "Summary:\t" +msgstr "" + +#: GetIABooksActivity.py:633 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:634 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:761 +msgid "You must enter at least 3 letters." +msgstr "" + +#: GetIABooksActivity.py:784 +#, python-format +msgid "New catalog list %s was found" +msgstr "" + +#: GetIABooksActivity.py:788 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:804 +msgid "Sorry, we only found english books." +msgstr "" + +#: GetIABooksActivity.py:897 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:897 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:942 +#, python-format +msgid "Error: Could not download %s. " +msgstr "" + +#: GetIABooksActivity.py:1000 +msgid "Download completed" +msgstr "" + +#: GetIABooksActivity.py:1008 +msgid "Show in Journal" +msgstr "" + +#: GetIABooksActivity.py:1011 +msgid "Ok" +msgstr "" + +#: listview.py:39 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:43 +msgid "Publisher" +msgstr "" + +#: listview.py:45 +msgid "Language" +msgstr "" + +#: listview.py:47 +msgid "Publish Date" +msgstr "" diff --git a/po/af.po b/po/af.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/af.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ak.po b/po/ak.po new file mode 100644 index 0000000..73af20b --- /dev/null +++ b/po/ak.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/am.po b/po/am.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/am.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ar_SY.po b/po/ar_SY.po new file mode 100644 index 0000000..3f32c9e --- /dev/null +++ b/po/ar_SY.po @@ -0,0 +1,142 @@ +# 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. +# 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. +# 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. +# 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. +# 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: 2010-01-20 00:33-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.3.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ay.po b/po/ay.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ay.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/bi.po b/po/bi.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/bi.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/bn.po b/po/bn.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/bn.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/bn_IN.po b/po/bn_IN.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/bn_IN.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/bs.po b/po/bs.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/bs.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/cpp.po b/po/cpp.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/cpp.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..73af20b --- /dev/null +++ b/po/da.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..a6172ee --- /dev/null +++ b/po/de.po @@ -0,0 +1,112 @@ +# 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: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-03-27 23:22+0200\n" +"Last-Translator: shellige <email@hellige-online.de>\n" +"Language-Team: LANGUAGE <LL@li.org>\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" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "Bücher erhalten" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Buch erhalten" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Band" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Bücher" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Schlagwörter (Autor oder Titel) eingeben um die Suche zu beginnen." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Titel:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Autor:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Herausgeber:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Sprache:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Fehler" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Du mußt mindestens ein Suchwort eingeben." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Suche wird ausgeführt, bitte warten..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Sorry, es konnten keine Bücher gefunden werden." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Verbindungszeit überschritten für " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Fehler: Konnte %s nicht laden. Der angegebene Pfad scheint falsch zu sein." + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Erfolg: %s dem Journal zugefügt." + +#: listview.py:40 +msgid "Title" +msgstr "Titel" + +#: listview.py:41 +msgid "Author" +msgstr "Autor" + +#: listview.py:42 +msgid "Publisher" +msgstr "Herausgeber" + +#: listview.py:43 +msgid "Language" +msgstr "Sprache" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Veröffentlichung" diff --git a/po/dz.po b/po/dz.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/dz.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..c42b095 --- /dev/null +++ b/po/el.po @@ -0,0 +1,117 @@ +# 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-11-26 16:55+0530\n" +"PO-Revision-Date: 2009-12-17 13:47-0400\n" +"Last-Translator: Γιάννης Κασκαμανίδης <ttnfy17@yahoo.gr>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: el\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 "Get Books" +msgstr "Προμήθεια βιβλίων" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Προμήθεια βιβλίου" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Ένταση" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "Βιβλία" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" +"Εισάγετε λέξεις από το ονοματεπώνυμο του συγγραφέα ή τον τίτλο του βιβλίου, " +"για να ξεκινήσει η αναζήτηση." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "Τίτλος:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "Συγγραφέας:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "Εκδότης:\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "Γλώσσα:\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "Σύνδεσμος:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "Σφάλμα" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "Πρέπει να εισάγετε τουλάχιστον μια λέξη για αναζήτηση." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "Εκτέλεση αναζήτησης, παρακαλώ περιμένετε..." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "Συγνώμη, αλλά δεν είναι δυνατόν να βρεθούν βιβλία." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "Λήξη χρόνου σύνδεσης για " + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Σφάλμα: Αδυναμία λήψης του%s . Η διαδρομή στον κατάλογο φαίνεται να είναι " +"λανθασμένη." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Επιτυχία: %s προστέθηκαν στο Ημερολόγιο." + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "Τίτλος" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "Συγγραφέας" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "Εκδότης" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "Γλώσσα" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "Ημερομηνία έκδοσης" diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..f300436 --- /dev/null +++ b/po/en.po @@ -0,0 +1,189 @@ +# 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. +# 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. +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-04-29 00:31-0400\n" +"PO-Revision-Date: 2011-06-03 07:35+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: en\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 "Get Books" +msgstr "Get Books" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "Books" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "Any language" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "Catalogs" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "Performing lookup, please wait..." + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "My books" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volume" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "Format:" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "Get Book" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "Enter words from the Author or Title to begin search." + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "Selected book" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "Title:\t\t" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "Author:\t\t" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "Publisher:\t" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "Language:\t" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "You must enter at least 3 letters." + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "Sorry, no books could be found." + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "Sorry, we only found english books." + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "Error" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "Connection timed out for " + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "Error: Could not download %s. " + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "Download completed" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "Show in Journal" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "Ok" + +#: listview.py:39 +msgid "Title" +msgstr "Title" + +#: listview.py:41 +msgid "Author" +msgstr "Author" + +#: listview.py:43 +msgid "Publisher" +msgstr "Publisher" + +#: listview.py:45 +msgid "Language" +msgstr "Language" + +#: listview.py:47 +msgid "Publish Date" +msgstr "Publish Date" + +#~ msgid "You must enter at least one search word." +#~ msgstr "You must enter at least one search word." + +#, python-format +#~ msgid "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" +#~ msgstr "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" + +#, python-format +#~ msgid "Success: %s was added to Journal." +#~ msgstr "Success: %s was added to Journal." diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..22c59b0 --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,174 @@ +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-04-29 00:31-0400\n" +"PO-Revision-Date: 2011-06-03 08:16+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: en_GB\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 "Get Books" +msgstr "Get Books" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "Books" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "Any language" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "Catalogs" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "Performing lookup, please wait..." + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "My books" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volume" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "Format:" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "Get Book" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "Enter words from the Author or Title to begin search." + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "Selected book" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "Title:\t\t" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "Author:\t\t" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "Publisher:\t" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "Language:\t" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "You must enter at least 3 letters." + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "Sorry, no books could be found." + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "Sorry, we only found English books." + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "Error" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "Connection timed out for " + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "Error: Could not download %s. " + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "Download completed" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "Show in Journal" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "Ok" + +#: listview.py:39 +msgid "Title" +msgstr "Title" + +#: listview.py:41 +msgid "Author" +msgstr "Author" + +#: listview.py:43 +msgid "Publisher" +msgstr "Publisher" + +#: listview.py:45 +msgid "Language" +msgstr "Language" + +#: listview.py:47 +msgid "Publish Date" +msgstr "Publish Date" + +#~ msgid "You must enter at least one search word." +#~ msgstr "You must enter at least one search word." + +#, python-format +#~ msgid "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" +#~ msgstr "" +#~ "Error: Could not download %s . The path in the catalogue seems to be " +#~ "incorrect" + +#, python-format +#~ msgid "Success: %s was added to Journal." +#~ msgstr "Success: %s was added to Journal." diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..b0a2a3c --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,177 @@ +# 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. +# 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. +# 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. +# 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: 2011-04-29 00:31-0400\n" +"PO-Revision-Date: 2011-06-02 07:50+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: en_US\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 "Get Books" +msgstr "Get Books" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "Books" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "Any language" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "Catalogs" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "Performing lookup, please wait..." + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "My books" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volume" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "Format:" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "Get Book" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "Enter words from the Author or Title to begin search." + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "Selected book" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "Title:\t\t" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "Author:\t\t" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "Publisher:\t" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "Language:\t" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "You must enter at least 3 letters." + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "Sorry, no books could be found." + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "Sorry, we only found english books." + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "Error" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "Connection timed out for " + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "Error: Could not download %s. " + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "Download completed" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "Show in Journal" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "Ok" + +#: listview.py:39 +msgid "Title" +msgstr "Title" + +#: listview.py:41 +msgid "Author" +msgstr "Author" + +#: listview.py:43 +msgid "Publisher" +msgstr "Publisher" + +#: listview.py:45 +msgid "Language" +msgstr "Language" + +#: listview.py:47 +msgid "Publish Date" +msgstr "Publish Date" + +#~ msgid "You must enter at least one search word." +#~ msgstr "You must enter at least one search word." + +#, python-format +#~ msgid "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" +#~ msgstr "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" + +#, python-format +#~ msgid "Success: %s was added to Journal." +#~ msgstr "Success: %s was added to Journal." diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..486a677 --- /dev/null +++ b/po/es.po @@ -0,0 +1,298 @@ +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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. +# 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: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-12-23 18:06+0200\n" +"Last-Translator: Gonzalo <godiard@sugarlabs.org>\n" +"Language-Team: Spanish <LL@li.org>\n" +"Language: es\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 "Get Books" +msgstr "Biblioteca Ceibal" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Descargar archivo" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volumen" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Libros" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" +"Introduzca palabras que describan el autor o título para empezar búsqueda." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Título:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Autor:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Editor:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Lenguaje:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Error" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Debes indroducir al menos una palabra para buscar." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Realizando busqueda, por favor espere..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Lo sentimos, no se pudieron encontrar libros." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Se perdio la conexión para " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Error: No se pudo descargar %s . La ruta en el catalogo parece incorrecta" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Éxito: %s se añadio al diario." + +#: listview.py:40 +msgid "Title" +msgstr "Título" + +#: listview.py:41 +msgid "Author" +msgstr "Autor" + +#: listview.py:42 +msgid "Publisher" +msgstr "Editor" + +#: listview.py:43 +msgid "Language" +msgstr "Lenguaje" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Fecha de publicación" + +#: GetBooksActivity.py:275 +msgid "Catalogs" +msgstr "Catalogos" + +#: GetBooksActivity +msgid "Format:" +msgstr "Formato:" + +msgid "Selected book" +msgstr "Libro Seleccionado" + +msgid "Summary:\t" +msgstr "Sumario:\t" + +msgid "You must enter at least 3 letters." +msgstr "Debes ingresar al menos 3 letras." + +msgid "New catalog list %s was found" +msgstr "Se encontró la nueva categoría de nombre: %s" + +msgid "Sorry, we only found english books." +msgstr "Lo siento, solo encontramos libros en inglés." + +msgid "Any language" +msgstr "Cualquier lenguaje" + +msgid "Show in Journal" +msgstr "Mostrar en el Diario" + +msgid "My books" +msgstr "Mis libros" + diff --git a/po/fa.po b/po/fa.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/fa.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/fa_AF.po b/po/fa_AF.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/fa_AF.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ff.po b/po/ff.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ff.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/fi.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/fil.po b/po/fil.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/fil.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..2f7b4bd --- /dev/null +++ b/po/fr.po @@ -0,0 +1,133 @@ +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-02-24 23:37+0200\n" +"Last-Translator: samy boutayeb <s.boutayeb@free.fr>\n" +"Language-Team: LANGUAGE <LL@li.org>\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 "Get Books" +msgstr "Livres à moi" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Obtenir un livre" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "Volume %.2f Go" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Livres" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Entrer les mots de l'auteur ou du titre pour commencer la recherche." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Titre :\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Auteur :\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Éditeur :\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Langue :\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Lien :\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Erreur" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Entrez au moins un mot pour la recherche." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Recherche en cours, patientez..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Désolé, aucun livre n'a été trouvé." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Délai de connexion écoulé pour " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Erreur : Téléchargement de %s impossible. Le chemin indiqué dans le " +"catalogue est incorrect" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Opération réussie : %s a été ajouté au Journal." + +#: listview.py:40 +msgid "Title" +msgstr "Titre" + +#: listview.py:41 +msgid "Author" +msgstr "Auteur" + +#: listview.py:42 +msgid "Publisher" +msgstr "Éditeur" + +#: listview.py:43 +msgid "Language" +msgstr "Langue" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Date de publication" diff --git a/po/gu.po b/po/gu.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/gu.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ha.po b/po/ha.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ha.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/he.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/hi.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ht.po b/po/ht.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ht.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..cb2cb68 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\n" +"PO-Revision-Date: 2009-12-21 22:51-0400\n" +"Last-Translator: Chris Leonard <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.2.1\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "Hiba" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/hy.po b/po/hy.po new file mode 100644 index 0000000..f03db1a --- /dev/null +++ b/po/hy.po @@ -0,0 +1,174 @@ +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-04-29 00:31-0400\n" +"PO-Revision-Date: 2011-07-29 19:38+0200\n" +"Last-Translator: <anush.mkrtchyan@ca1492.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: hy\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 "Get Books" +msgstr "Գտնել Գրքեր" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "Գրքեր" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "Ցանկացած լեզու" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "Կատալոգներ" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "Կատարվում է որոնումը, խնդրվում է սպասել..." + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "Իմ գրքերը" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Ծավալ" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "Ձևաչափ`" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "Գտնել Գիրք" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "" +"Մուտքագրեք հեղինակի անունը կամ վերնագրի մասը գրքի որոնումը սկսելու համար:" + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "ընտրված գիրք" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "Վերնագիր.\t\t" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "Հեղինակ.\t\t" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "Հրատարակիչ.\t" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "Լեզու.\t" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "Հղում.\t\t" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "Դուք պետք է մուտքագրեք առնվազն 3 տառ:" + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "Ներեցեք, ոչ մի գիրք չի գտնվել:" + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "ներեցեք, մենք գտանք միայն անգլերեն գրքեր:" + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "Վրիպում" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "Կապը ժամասպառվել է " + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "Սխալմունք: Չհաջողվեց բեռնել %s: " + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "բեռնումը ավարտված է" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "Ցույց տալ ամսագրում" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "լավ" + +#: listview.py:39 +msgid "Title" +msgstr "Վերնագիր" + +#: listview.py:41 +msgid "Author" +msgstr "Հեղինակ" + +#: listview.py:43 +msgid "Publisher" +msgstr "Հրատարակիչ" + +#: listview.py:45 +msgid "Language" +msgstr "Լեզու" + +#: listview.py:47 +msgid "Publish Date" +msgstr "Հրատարակման թիվը" + +#~ msgid "You must enter at least one search word." +#~ msgstr "Դուք պետք է մուտքագրեք նվազագույնը մեկ որոնման բառ:" + +#, python-format +#~ msgid "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" +#~ msgstr "" +#~ "Վրիպում. Հնարավոր չէ բեռնել %s . Գրացուցակում հայտարարված ուղին ոչ ճշգրիտ է:" + +#, python-format +#~ msgid "Success: %s was added to Journal." +#~ msgstr "Հաջողում. %s ավելացվեց մատյանում:" diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..9f42041 --- /dev/null +++ b/po/id.po @@ -0,0 +1,138 @@ +# 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. +# 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. +# 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. +# 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. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-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.5.2\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ig.po b/po/ig.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ig.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/is.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..7b04625 --- /dev/null +++ b/po/it.po @@ -0,0 +1,133 @@ +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-03-25 22:28+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\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 2.0.3\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "Trova Libri" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Trova un Libro" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volume" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Libri" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Inserisci dati su autore o titolo per iniziare la ricerca." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Titolo:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Autore:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Editore:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Lingua:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Errore" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Bisogna inserire almeno una parola per la ricerca." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Ricerca in corso, per favore attendere..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Spiacente, non ho trovato libri." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Connessione fuori tempo massimo per " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Errore: Non posso scaricare %s . Il percorso presente nel catalogo parrebbe " +"sbagliato" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Successo: %s è stato copiato nel Diario." + +#: listview.py:40 +msgid "Title" +msgstr "Titolo" + +#: listview.py:41 +msgid "Author" +msgstr "Autore" + +#: listview.py:42 +msgid "Publisher" +msgstr "Editore" + +#: listview.py:43 +msgid "Language" +msgstr "Lingua" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Data di pubblicazione" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/km.po b/po/km.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/km.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/kn.po b/po/kn.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/kn.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/kos.po b/po/kos.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/kos.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ku.po b/po/ku.po new file mode 100644 index 0000000..73cfdeb --- /dev/null +++ b/po/ku.po @@ -0,0 +1,139 @@ +# 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: 2011-04-29 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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "" + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "" + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "" + +#: listview.py:39 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:43 +msgid "Publisher" +msgstr "" + +#: listview.py:45 +msgid "Language" +msgstr "" + +#: listview.py:47 +msgid "Publish Date" +msgstr "" diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..73af20b --- /dev/null +++ b/po/lt.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/lv.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/messages.mo b/po/messages.mo Binary files differnew file mode 100644 index 0000000..e17b49e --- /dev/null +++ b/po/messages.mo diff --git a/po/mg.po b/po/mg.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/mg.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ml.po b/po/ml.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ml.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/mn.po b/po/mn.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/mn.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/mr.po b/po/mr.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/mr.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/mvo.po b/po/mvo.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/mvo.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/na.po b/po/na.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/na.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/nah.po b/po/nah.po new file mode 100644 index 0000000..73cfdeb --- /dev/null +++ b/po/nah.po @@ -0,0 +1,139 @@ +# 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: 2011-04-29 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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "" + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "" + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "" + +#: listview.py:39 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:43 +msgid "Publisher" +msgstr "" + +#: listview.py:45 +msgid "Language" +msgstr "" + +#: listview.py:47 +msgid "Publish Date" +msgstr "" diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ne.po b/po/ne.po new file mode 100644 index 0000000..2681150 --- /dev/null +++ b/po/ne.po @@ -0,0 +1,113 @@ +# 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-11-26 16:55+0530\n" +"PO-Revision-Date: 2009-12-21 23:51-0400\n" +"Last-Translator: Chris Leonard <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ne\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "त्रुति" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..a386dd5 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,136 @@ +# 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. +# 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. +# 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. +# 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: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-06-29 10:14+0200\n" +"Last-Translator: whe <heppew@yahoo.com>\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 2.0.3\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "Neem Boeken" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Neem Boek" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Volume" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Boeken" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Voer woorden van de Auteur of Titel in om zoeken te beginnen." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Titel:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Auteur:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Uitgever:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Taal:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Link:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Fout" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Je moet tenminste één zoekwoord invoeren." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Aan het opzoeken, even geduld aub..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Sorry, geen boeken gevonden." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Tijdoverschrijding bij verbinding voor " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Fout: Kan niet downloaden %s . Het pad in de catalogus lijkt niet correct" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Succes: %s is aan Dagboek toegevoegd." + +#: listview.py:40 +msgid "Title" +msgstr "Titel" + +#: listview.py:41 +msgid "Author" +msgstr "Auteur" + +#: listview.py:42 +msgid "Publisher" +msgstr "Uitgever" + +#: listview.py:43 +msgid "Language" +msgstr "Taal" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Uitgeefdatum" diff --git a/po/nn.po b/po/nn.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/nn.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pa.po b/po/pa.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/pa.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pap.po b/po/pap.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/pap.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pis.po b/po/pis.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/pis.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ps.po b/po/ps.po new file mode 100644 index 0000000..68581a1 --- /dev/null +++ b/po/ps.po @@ -0,0 +1,113 @@ +# 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-11-26 16:55+0530\n" +"PO-Revision-Date: 2009-12-22 00:06-0400\n" +"Last-Translator: Chris Leonard <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ps\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "تیروتنه" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..f9868ec --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,115 @@ +# 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-11-26 16:55+0530\n" +"PO-Revision-Date: 2010-01-11 21:06-0400\n" +"Last-Translator: Robson Mendonça <robsonmwoc@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: pt_BR\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "Livros" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "Escreva o nome do Autor ou Título para começar a busca." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "Título:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "Autor:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "Editora:\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "Idioma:\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "Endereço:\t\t" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "Erro" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "Você deve digitar pelo menos uma palavra." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "Realizando a pesquisa, por favor espere..." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "Desculpe, nenhum livro pode ser encontrado." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "Conexão expirou para" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Erro: Não foi possível baixar %s. O caminho para o catálogo parece estar " +"errado." + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Sucesso: %s foi adicionado ao Diário." + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "Título" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "Autor" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "Editora" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "Idioma" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "Data de publicação" diff --git a/po/qu.po b/po/qu.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/qu.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/rw.po b/po/rw.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/rw.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sd.po b/po/sd.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/sd.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/si.po b/po/si.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/si.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sm.po b/po/sm.po new file mode 100644 index 0000000..9c5e42a --- /dev/null +++ b/po/sm.po @@ -0,0 +1,123 @@ +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-07-28 13:10+0200\n" +"Last-Translator: Tabitha <tabitha.roder@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: sm\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 2.0.3\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +#, fuzzy +msgid "Language:\t" +msgstr "Gagana" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "Gagana" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sq.po b/po/sq.po new file mode 100644 index 0000000..f010ae8 --- /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. +# 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. +# 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. +# 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. +# 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. +# 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: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-02-16 07:15+0200\n" +"Last-Translator: Chris <cjl@laptop.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: sq\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 "Get Books" +msgstr "Merr Libra" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Merr Libër" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB Sasi" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Libra" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Shkruani fjalë nga Autori apo Titulli për të filluar kërkimin." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Titulli:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Autori:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Botuesi:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Gjuha:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Lidhja:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Gabim" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Ju duhet të shënoni në të paktën një fjalë të kërkimit." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Duke e zbatuar rregullimin, ju lutem prisni..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Na vjen keq, asnjë libër nuk u gjet." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Lidhje u ndërpre jashtë për " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"Gabim: Nuk mund të shkarkoni %s. Kalimi në katalogun duket të jetë e pasaktë" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Suksesi: %s është shtuar në Protokoll." + +#: listview.py:40 +msgid "Title" +msgstr "Titulli" + +#: listview.py:41 +msgid "Author" +msgstr "Autori" + +#: listview.py:42 +msgid "Publisher" +msgstr "Botuesi" + +#: listview.py:43 +msgid "Language" +msgstr "Gjuha" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Data e Botimit" diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..603b1dd --- /dev/null +++ b/po/sr.po @@ -0,0 +1,130 @@ +# 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. +# 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. +# 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. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/st.po b/po/st.po new file mode 100644 index 0000000..73d305d --- /dev/null +++ b/po/st.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/sw.po b/po/sw.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/sw.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ta.po b/po/ta.po new file mode 100644 index 0000000..9b1718b --- /dev/null +++ b/po/ta.po @@ -0,0 +1,133 @@ +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-08-01 21:00+0200\n" +"Last-Translator: தங்கமணி <thangam.arunx@gmail.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 2.0.3\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "புத்தகங்களை வாங்கு" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "புத்தகத்தை வாங்கு" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB கணஅளவு" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "புத்தகங்கள்" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "ஆசிரியரிகளிடமிருந்து வார்த்தைகளை தட்டு (அ) தேடலை தலைப்புடன் தொடங்கு" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "தலைப்பு:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "ஆசிரியர்:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "வெளியீடுபவர்:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "மொழி:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "இணைப்பு:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "தவறு" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "நீங்கள் தயவுசெய்து ஒரு வார்தையாவது தட்டினால் தான் தேடமுடியும்" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "பார்த்தல் செயலுல், தயவுசெய்து காத்திருக்கவும்..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "மன்னிக்கவும், ஒரு புத்தகமும் தென்படவில்லை" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "இணைப்பின் கால அவகாசம் மிகுதியானது" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" +"பிழை: பதிவிறக்க முடியவில்லை %s . பட்டியலில் உள்ள பாதை தவறாக தெறிகிறது " +" " + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "வெற்றி: %s சஞ்சிகையுடன் சேர்க்கப்பட்டது" + +#: listview.py:40 +msgid "Title" +msgstr "தலைப்பு" + +#: listview.py:41 +msgid "Author" +msgstr "ஆசிரியர்" + +#: listview.py:42 +msgid "Publisher" +msgstr "வெளியிடுபவர்" + +#: listview.py:43 +msgid "Language" +msgstr "மொழி" + +#: listview.py:44 +msgid "Publish Date" +msgstr "வளியீடு திகதி" diff --git a/po/te.po b/po/te.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/te.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/templates.po b/po/templates.po new file mode 100644 index 0000000..fdd4f6d --- /dev/null +++ b/po/templates.po @@ -0,0 +1,126 @@ +# 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. +# 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. +# 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: 2010-01-20 00:33-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.5.2\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/th.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ton.po b/po/ton.po new file mode 100644 index 0000000..603b1dd --- /dev/null +++ b/po/ton.po @@ -0,0 +1,130 @@ +# 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. +# 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. +# 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. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/tpi.po b/po/tpi.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/tpi.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/tvl.po b/po/tvl.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/tvl.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/tyv.po b/po/tyv.po new file mode 100644 index 0000000..73af20b --- /dev/null +++ b/po/tyv.po @@ -0,0 +1,110 @@ +# 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: 2010-01-20 00:33-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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/tzm.po b/po/tzm.po new file mode 100644 index 0000000..73cfdeb --- /dev/null +++ b/po/tzm.po @@ -0,0 +1,139 @@ +# 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: 2011-04-29 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.7.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "" + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "" + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "" + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "" + +#: listview.py:39 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:43 +msgid "Publisher" +msgstr "" + +#: listview.py:45 +msgid "Language" +msgstr "" + +#: listview.py:47 +msgid "Publish Date" +msgstr "" diff --git a/po/tzo.po b/po/tzo.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/tzo.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ug.po b/po/ug.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ug.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..c9aaca1 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,126 @@ +# 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. +# 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. +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/ur.po b/po/ur.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/ur.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..d9a6011 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,119 @@ +# 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. +# 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: 2010-01-20 00:33-0500\n" +"PO-Revision-Date: 2010-03-07 14:55+0200\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 2.0.1\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "Lấy sách" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "Lấy sách" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "Khối tin %.2f GB" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "Sách" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "Gõ từ của Tác giả hay Tên sách để bắt đầu tìm kiếm." + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "Tên sách:\t\t" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "Tác giả:\t\t" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "Nhà xuất bản:\t" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "Ngôn ngữ:\t" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "Liên kết:\t\t" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "Lỗi" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "Phải gõ ít nhất một từ cần tìm." + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "Đang tra tìm, hãy đợi..." + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "Tiếc là không tìm thấy cuốn sách nào." + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "Kết nối quá hạn trong " + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "Lỗi: không thể tải về %s . Thế là phân loại chứa một đường dẫn sai" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "Thành công: %s đã được thêm vào Nhật ký." + +#: listview.py:40 +msgid "Title" +msgstr "Tên sách" + +#: listview.py:41 +msgid "Author" +msgstr "Tác giả" + +#: listview.py:42 +msgid "Publisher" +msgstr "Nhà xuất bản" + +#: listview.py:43 +msgid "Language" +msgstr "Ngôn ngữ" + +#: listview.py:44 +msgid "Publish Date" +msgstr "Ngày xuất bản" diff --git a/po/wa.po b/po/wa.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/wa.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/yo.po b/po/yo.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/yo.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..bb88904 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,112 @@ +# 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-11-26 16:55+0530\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 "Get Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:150 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:208 +msgid "Books" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:224 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:282 +msgid "Title:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:284 +msgid "Author:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:286 +msgid "Publisher:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:287 +msgid "Language:\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:292 +msgid "Link:\t\t" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Error" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:313 +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:321 +msgid "You must enter at least one search word." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:330 +msgid "Performing lookup, please wait..." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:339 +msgid "Sorry, no books could be found." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:390 +msgid "Connection timed out for " +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:427 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/GetIABooksActivity.py:457 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:40 +msgid "Title" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:41 +msgid "Author" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:42 +msgid "Publisher" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:43 +msgid "Language" +msgstr "" + +#: /home/sayamindu/Work/Devel/get-ia-books/listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..328bbdd --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,118 @@ +# 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. +# 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: 2010-01-20 00:33-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.6.0\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "" + +#: GetIABooksActivity.py:94 +msgid "Get Book" +msgstr "" + +#: GetIABooksActivity.py:159 +#, python-format +msgid "%.2f GB Volume" +msgstr "" + +#: GetIABooksActivity.py:217 +msgid "Books" +msgstr "" + +#: GetIABooksActivity.py:233 +msgid "Enter words from the Author or Title to begin search." +msgstr "" + +#: GetIABooksActivity.py:292 +msgid "Title:\t\t" +msgstr "" + +#: GetIABooksActivity.py:294 +msgid "Author:\t\t" +msgstr "" + +#: GetIABooksActivity.py:296 +msgid "Publisher:\t" +msgstr "" + +#: GetIABooksActivity.py:297 +msgid "Language:\t" +msgstr "" + +#: GetIABooksActivity.py:302 +msgid "Link:\t\t" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +#: GetIABooksActivity.py:403 +msgid "Error" +msgstr "" + +#: GetIABooksActivity.py:323 GetIABooksActivity.py:331 +msgid "You must enter at least one search word." +msgstr "" + +#: GetIABooksActivity.py:340 +msgid "Performing lookup, please wait..." +msgstr "" + +#: GetIABooksActivity.py:349 +msgid "Sorry, no books could be found." +msgstr "" + +#: GetIABooksActivity.py:403 +msgid "Connection timed out for " +msgstr "" + +#: GetIABooksActivity.py:440 +#, python-format +msgid "" +"Error: Could not download %s . The path in the catalog seems to be incorrect" +msgstr "" + +#: GetIABooksActivity.py:470 +#, python-format +msgid "Success: %s was added to Journal." +msgstr "" + +#: listview.py:40 +msgid "Title" +msgstr "" + +#: listview.py:41 +msgid "Author" +msgstr "" + +#: listview.py:42 +msgid "Publisher" +msgstr "" + +#: listview.py:43 +msgid "Language" +msgstr "" + +#: listview.py:44 +msgid "Publish Date" +msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..31f0f69 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,180 @@ +# 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. +# 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. +# 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. +# 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. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-04-29 00:31-0400\n" +"PO-Revision-Date: 2011-06-06 00:44+0200\n" +"Last-Translator: Yuan Chao <yuanchao@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\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 2.0.1\n" + +#: activity/activity.info:2 +msgid "Get Books" +msgstr "愛讀書" + +#: GetIABooksActivity.py:96 +msgid "Books" +msgstr "書籍" + +#: GetIABooksActivity.py:250 +msgid "Any language" +msgstr "任何語言" + +#: GetIABooksActivity.py:262 +msgid "Catalogs" +msgstr "目錄" + +#: GetIABooksActivity.py:308 GetIABooksActivity.py:668 +msgid "Performing lookup, please wait..." +msgstr "搜尋中,請稍待。" + +#: GetIABooksActivity.py:348 +msgid "My books" +msgstr "我的收藏" + +#: GetIABooksActivity.py:363 +#, python-format +msgid "%.2f GB Volume" +msgstr "%.2f GB 容量" + +#: GetIABooksActivity.py:433 +msgid "Format:" +msgstr "格式: " + +#: GetIABooksActivity.py:446 +msgid "Get Book" +msgstr "取書" + +#: GetIABooksActivity.py:472 +msgid "Enter words from the Author or Title to begin search." +msgstr "請輸入作者或書名來進行查詢。" + +#: GetIABooksActivity.py:493 +msgid "Selected book" +msgstr "選擇書籍" + +#: GetIABooksActivity.py:512 +msgid "Title:\t\t" +msgstr "書名:\t\t" + +#: GetIABooksActivity.py:514 +msgid "Author:\t\t" +msgstr "作者:\t\t" + +#: GetIABooksActivity.py:516 +msgid "Publisher:\t" +msgstr "出版商:\t" + +#: GetIABooksActivity.py:525 +msgid "Language:\t" +msgstr "語言:\t" + +#: GetIABooksActivity.py:531 +msgid "Link:\t\t" +msgstr "連結:\t\t" + +#: GetIABooksActivity.py:652 +msgid "You must enter at least 3 letters." +msgstr "您至少要輸入三個字。" + +#: GetIABooksActivity.py:676 +msgid "Sorry, no books could be found." +msgstr "抱歉,找不到相符的書籍。" + +#: GetIABooksActivity.py:691 +msgid "Sorry, we only found english books." +msgstr "抱歉,只能找到英文書籍。" + +#: GetIABooksActivity.py:752 +msgid "Error" +msgstr "錯誤" + +#: GetIABooksActivity.py:752 +msgid "Connection timed out for " +msgstr "連線逾時 " + +#: GetIABooksActivity.py:797 +#, python-format +msgid "Error: Could not download %s. " +msgstr "錯誤,無法下載 %s 。" + +#: GetIABooksActivity.py:853 +msgid "Download completed" +msgstr "下載完成" + +#: GetIABooksActivity.py:861 +msgid "Show in Journal" +msgstr "顯示日誌" + +#: GetIABooksActivity.py:864 +msgid "Ok" +msgstr "確定" + +#: listview.py:39 +msgid "Title" +msgstr "書名" + +#: listview.py:41 +msgid "Author" +msgstr "作者" + +#: listview.py:43 +msgid "Publisher" +msgstr "出版商" + +#: listview.py:45 +msgid "Language" +msgstr "語言" + +#: listview.py:47 +msgid "Publish Date" +msgstr "發行日期" + +#~ msgid "You must enter at least one search word." +#~ msgstr "您必須輸入至少一個搜尋字串。" + +#, python-format +#~ msgid "" +#~ "Error: Could not download %s . The path in the catalog seems to be incorrect" +#~ msgstr "錯誤:無法下載。目錄中的路徑似乎有錯誤。" + +#, python-format +#~ msgid "Success: %s was added to Journal." +#~ msgstr "成功:%s 已經新增到日誌當中。" diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..2f2c143 --- /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 sugar3.activity import bundlebuilder + +bundlebuilder.start() |